Я пишу веб-приложение в питоне/пирамиде, которое обрабатывает загрузку файла (через jquery uploader). Код для загрузки составляет:Как обрабатывать загрузку асинхронно в пирамиде
@view_config(route_name='file.upload', renderer='json')
def file_upload(request):
for item, filestorage in request.POST.items():
f = File.create(filestorage)
u = Upload.create(f.hash)
return {
'url': request.route_url('file.get', uploadid=u.urlid)
}
, где затем File.create делает sha1 файла и перемещает его в постоянном месте, помещая метаданные в базе данных. (Файл фактически является классом SQLAlchemy)
Проблема заключается в том, что вызываемый объект называется после, что передача файла на сервер завершена. Это создает две проблемы: первая заключается в том, что я не могу отказаться от передачи файла, если он больше определенного размера. Во-вторых, я должен ждать, чтобы получить весь файл, а затем я могу начать хешировать его.
То, что я хотел бы получить, - это начать процесс с файлом - какой-то поток - как только я получу данные, чтобы я мог хэшировать его, пока пользователь загружает его, и я могу остановить передачу, если размер больше некоторой ценности.
Я не уверен здесь, но я думаю, что это связано с wsgi. Я думаю, что приложение вызывается только тогда, когда запрос завершен. Возможно, вы захотите посмотреть в этом направлении. –
Я думаю, что Антуан прав. Вот как я всегда это понимал, чтобы работать –
Я тоже так думаю, поэтому я отметил вопрос «wsgi»;) –