FastCGI或Apache2限制上传大小吗?

3 投票
1 回答
1322 浏览
提问于 2025-04-16 06:15

我在上传文件时遇到了问题。我在Apache2(unix)上使用FastCGI来运行一个符合WSGI标准的应用程序。文件上传的形式是图片,这些图片被保存在MySQL数据库中。但是,较大的图片在65535字节时被截断。根据我的了解,似乎没有任何东西应该限制文件的大小,我也不确定我的解决方案中的哪个部分会导致这个问题。

是FastCGI吗?它会限制文件上传的大小吗?

是Python吗?cgi.FieldStorage对象给了我一个上传文件的句柄,我然后用file.read()来读取。这会以某种方式限制文件大小吗?

是MySQL吗?保存图片数据的列类型是longblob。我觉得这个可以存储几GB的数据。所以几MB应该没问题吧?

flups WSGIServer吗?我找不到任何相关的信息。

我的文件系统绝对可以处理大文件,所以这不是问题。有什么想法吗?

更新:

是MySQL。我让Python输出了上传的字节数,发现它大于65535。所以我查看了mysqldmax_allowed_packet设置,并把它设为128M。虽然有点过了,但我想确保一下。

我现在唯一的问题是让Python的MySQLdb允许传输超过65535字节的文件。有人知道怎么做吗?可能会单独发个问题。

1 个回答

2

如果网络服务器或网关层在处理表单提交时把数据截断了,我会期待从 FieldStorage 收到一个错误,因为截断不仅会影响文件上传,还会破坏整个 multipart/form-data 的结构。即使 cgi.py 能够容忍这种情况,也不太可能正好在合适的位置截断,留下恰好 2**16-1 字节的文件上传。

所以我会怀疑是 MySQL 的问题。LONGBLOB 类型应该可以支持到 2**32-1 字节,但普通的 BLOB 类型最大只能到 65535 字节。你确定你认为的数据类型是正确的吗?可以用 SHOW CREATE TABLE x 来检查一下。你用的是哪个数据库层来获取这些数据的呢?

撰写回答