FastCGI или Apache2 ограничивают размеры загрузки? - PullRequest
3 голосов
/ 29 октября 2010

У меня проблема с загрузкой файлов.Я использую FastCGI на Apache2 (Unix) для запуска WSGI-совместимого приложения.Загрузка файлов в виде изображений начинается с сохранения в базе данных MySQL.Однако большие изображения обрезаются до 65535 байт.Насколько я могу судить, ничто не должно ограничивать размер файлов, и я не уверен, какая из частей моего решения будет причиной проблемы.

Является ли это FastCGI;это может ограничить размеры загружаемых файлов?

Это Python?Объект cgi.FieldStorage дает мне дескриптор файла для загруженного файла, который я затем прочитал: file.read().Это как-то ограничивает размеры файлов?

Это MySQL?Тип столбца для сохранения данных изображения - longblob.Я подумал, что это может хранить пару ГБ данных.Так что несколько МБ не должно быть проблемой, верно?

Это flups WSGIServer?Я не могу найти никакой информации об этом.

Моя файловая система определенно может обрабатывать большие файлы, так что это не проблема.Есть идеи?

UPDATE:

Это MySQL.Я получил python для вывода количества загруженных байтов, и оно превышает 65535. Поэтому я посмотрел на max_allowed_packet для mysqld и установил его на 128M.Избыток, но хочется быть уверенным на данный момент.

Моя единственная проблема сейчас заключается в получении MySQLdb для Python, позволяющего передавать более 65535 байтов.Кто-нибудь знает как это сделать?Могу опубликовать как отдельный вопрос.

1 Ответ

2 голосов
/ 29 октября 2010

Если бы уровень веб-сервера / шлюза урезал входящие формы, я бы ожидал ошибку от FieldStorage, так как усечение не только прервало бы загрузку файла, но и всю структуру multipart/form-data.Даже если бы cgi.py допустил это, было бы очень маловероятно, чтобы урезать multipart в просто правильное место, чтобы оставить ровно 2 ** 16-1 байт загрузки файла.

ТакЯ бы заподозрил MySQL.LONGBLOB должно быть в порядке до 2 ** 32-1, но 65535 будет максимальной длиной нормального BLOB.Вы уверены типы - это то, что вы думаете?Проверьте с SHOW CREATE TABLE x.Какой слой базы данных вы используете для получения данных?

...