Возобновляемая загрузка nginx с помощью upload_module и multipart / form - PullRequest
2 голосов
/ 01 июня 2011

В настоящее время я загружаю в веб-сервис на сервере nginx, используя модуль загрузки (http://www.grid.net.ru/nginx/upload.en.html) из пользовательского настольного приложения, выполняя простой POST, состоящий из нескольких частей, который отправляет файл в одну часть, и XML-код в формате base64 с метаданные файла в другой части.

Сервер получает этот POST, передает его моему веб-сервису, который читает метаданные, обрабатывает файл и все в порядке.

Теперь я хочу использовать директиву upload_resumable модуля загрузки, чтобы выполнить процедуру POST несколькими порциями, чтобы минимизировать шансы на отключение и разрешить возобновление. В настоящее время я могу сделать это, следуя протоколу, описанному здесь: http://www.grid.net.ru/nginx/resumable_uploads.en.html

Один отправляет байтовые диапазоны файла вместе с некоторыми заголовками, чтобы идентифицировать чанк и сеанс в нескольких сообщениях, и как только все части будут загружены, nginx создаст окончательный POST, содержащий имя файла и путь, и передаст его вашему Местоположение upload_pass (в моем случае это CGI для приложения django).

Тем не менее, мне неясно, как можно отправить многосоставное сообщение с помощью этого метода, поскольку протокол указывает, что тело сообщения POST должно быть байтами, указанными в диапазоне байтов. Мне нужно, чтобы последний пост также содержал XML, о котором я писал выше.

Я могу думать об отправке XML в качестве первых байтов тела и заголовка, который указывает, сколько байтов принадлежит ему, но это будет означать дополнительную обработку окончательного файла для удаления этого заголовка, и окончательные файлы потенциально находятся в Размерный ряд ГБ.

Есть еще идеи?

1 Ответ

2 голосов
/ 17 июня 2011

Поскольку в протоколе, поддерживаемом nginx, конкретно указано, что сообщение не должно быть составным, я отправил файл в теле, а остальные параметры закодированы в URL. Не самые красивые URL, но это работает.

...