порядок запроса параметров не определен [в multipart / form-data или вообще] - что делать? - PullRequest
2 голосов
/ 08 мая 2011

Я пишу веб-приложение, которое отправляет форму (одно из ее полей - mulitpart / form-data, поэтому, очевидно, должен использоваться POST, а не GET, поскольку файлы могут быть очень большими).Одно из полей - это своего рода транзакция / upload_id, а другое - содержимое файла.При загрузке должен отображаться индикатор выполнения.

Известный факт говорит о том, что порядок параметров в целом не определен, что означает, что любой из (file content / upload_id) может стоять первым.

Есть ли приемлемый / рекомендуемый способ заставить браузер отправлять upload_id до отправки содержимого файла?

Это считается правильной реализацией - ожидать, что upload_id будет первым ИЛИ тамлучший / самый распространенный / более правильный способ решения проблемы?В этом случае - было бы здорово услышать некоторые детали.

Обновление : мой серверный язык - Java / Servlets 3.0

Ответы [ 3 ]

1 голос
/ 08 мая 2011

Что ж, лучшим ответом (без использования фильтров) будет публикация upload_id (ов) как части URL (после '?'), Даже при отправке запроса POST.В этом случае они всегда будут обрабатываться раньше содержимого файлов.

0 голосов
/ 08 мая 2011

Также с помощью сервлетов, и в моем случае я хотел запустить мой CSRF-фильтр в своем сервлете, прежде чем начать потоковую передачу файла: если фильтр не удался, я могу убить запрос, прежде чем я загрузил свой 20-гигабайтный видеофайлв отличие от реализации по умолчанию PHP, где сервер только нажимает ваш скрипт ПОСЛЕ того, как он проанализировал весь запрос.

Это было что-то вроде хака с моей стороны, но в нескольких случаях мне приходилось делать это, я обманывал и помещал параметры нефайлового запроса в URL и в каждом случае (используя почти все браузеры, с которыми я тестировал), итератор над параметрами запроса на сервере (я использую commons fileupload в потоковом режиме) получил параметры запроса, не относящиеся к файлу, до получения данных файла.Несколько хрупкий, но не бесполезный.

Я предполагаю, что если вы закажете параметры запроса с файлом <input> в качестве последнего элемента, вы получите то же поведение.

0 голосов
/ 08 мая 2011

Вам не нужно беспокоиться о порядке отправки параметров. Если это так, то ваш код на стороне сервера очень хрупкий.

Запрос, состоящий из нескольких частей, будет содержать имя поля каждого переданного поля формы. Используйте имя для ссылки на это поле независимо от порядка его отправки.

Если вы анализируете тело сообщения вручную, я предлагаю вам взглянуть на существующие проекты как Apache FileUpload , который абстрагируется от этого.

...