Сложная проблема с загрузкой файлов в Perl - PullRequest
1 голос
/ 15 февраля 2012

Мы используем CGI.pm, чтобы помочь нам загружать файлы на нашем веб-сайте и через наш API, который используется нашими приложениями для Android и iPhone. Недавно мы заметили, что CGI.pm, похоже, не возвращает никаких параметров для почти 50% файлов, загружаемых через наше приложение для iPhone. Мы не видели подобной проблемы с этими файлами, загружаемыми через наш веб-сайт.

Мы не можем воспроизвести проблему при тестировании, но при работе метод cgi_error () файла CGI.pm не сообщает об ошибках в тех случаях, когда отсутствуют параметры CGI.pm. Мы подтвердили, что приложение iPhone всегда содержит правильные параметры при размещении файлов для загрузки.

Быстрый фон по настройке. У нас есть приложение на серверах Amazon EC2, балансировка нагрузки которых выполняется с помощью Amazon Elastic Load Balancers. У нас также есть $ CGI :: POST_MAX = (1024 * 100000); поэтому максимальный размер POST установлен в 100 МБ, и мы подтвердили, что все загрузки находятся под этим пределом.

Я не уверен, куда идти дальше. Буду очень признателен за любые идеи о том, что может быть проблемой и как ее решить. Также было бы полезно узнать, как определить корень проблемы, чтобы мы могли приступить к устранению неполадок.

Заранее спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Потеря параметров без регистрации ошибок - это как раз то, что модуль CGI обнаружил ошибку при обработке данных POST - например, POST превышает $ CGI :: POST_MAX.Используете ли вы CGI.pm в функциональном режиме, вызывая param (), или объектно-ориентированный режим вызывая $ cgi-> param ()?Относительно cgi_error (), perldoc CGI предупреждает: При использовании функционально-ориентированного интерфейса ошибки могут возникать только при первом вызове param ().Будьте готовы к этому!

Что касается отладки, если вы подозреваете, что CGI.pm маскирует ваши ошибки, попробуйте посмотреть на объект CGI, прежде чем делать что-либо еще:

use Data::Dumper;
my $cgi = CGI->new();
warn Dumper($cgi);

В дампе объекта CGI вы увидите ошибку, подобную этой: '.cgi_error' => '413 Запрос слишком большой' - это то, что cgi_error () вернул бы для превышенного POST_MAX.

Также, еслииспользуя Modperl, имейте в виду, что CGI может работать со значениями, такими как $ CGI :: POST_MAX, между запросами к различным приложениям.(Но, так как вы указываете POST_MAX в своем, это не будет вашей проблемой.)

0 голосов
/ 07 сентября 2012

Мы тоже наблюдаем такое же поведение с CGI.pm, хотя мы думали, что проблема была ограничена только IE. Решается добавлением $CGI::POST_MAX=5000000. Over kill, так как это только 50k файл, который передается обратно и для.

...