Пирамида / Пилоны: Как проверить, завершен ли загруженный файл в запросе POST? - PullRequest
3 голосов
/ 13 июля 2011

Я создаю веб-инструмент, который позволяет пользователям загружать PDF-файлы на сервер с помощью своих веб-браузеров. Сервер основан на Python (Paste + Pyramid).

Проблема, с которой я столкнулся сейчас, заключается в следующем: если пользователь загружает довольно большой файл (скажем, 100 МБ), и он отменяет загрузку до его завершения, мой код обработчика на сервере все еще вызывается (вместо запрос отменяется).

Проблема в том, что request.POST['myfile'].file является неполным, когда это происходит. Это фактически означает, что файл PDF будет поврежден, если я просто запишу его в какое-то место на сервере.

Когда я смотрю журнал сервера, он показывает исключение «сломанный канал» на сервере вставки; однако я понятия не имею, как перехватить это исключение и сделать так, чтобы мой код представления / обработчика не выполнял и не сохранял неполный файл.

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

Похоже, что сервер HTTP paster неправильно проверяет загруженные данные формы и просто передает запрос по конвейеру WSGI, даже если пользователь закрыл соединение (HTTP POST).

Я работал над этимДля этого просто настройте NGINX в качестве обратного прокси.Это также добавляет некоторые преимущества безопасности, так как это может быть лучше протестировано, чем Paster.


Обновление:

Моя главная проблема заключалась в том, что я использовал runserver (встроенный веб-серверmanage.py).После некоторых проб и ошибок мы в итоге использовали WSGI.

В частности, uWSGI и Nginx в качестве веб-сервера.Статический контент обслуживается непосредственно Nginx, тогда как динамические страницы передаются через uWSGI и обрабатываются веб-приложением Python.

0 голосов
/ 17 июля 2011

Если вы не делаете что-то необычное (например, отслеживание хода загрузки и т. Д.), Ваш контроллер пилонов не должен вызываться до тех пор, пока весь файл не будет загружен.

...