ServletFileUpload - порядок ItemIterator - PullRequest
2 голосов
/ 06 июля 2011

Я использую Commons FileUpload как часть пользовательской реализации загрузчика. В частности, я использую ServletFileUpload и потоковый API (http://commons.apache.org/fileupload/streaming.html). API для метода getItemIterator () в ServletFileUpload говорит, что он гарантированно возвращает итератор FileItemStreams в порядке, в котором они были переданы . Может быть, это глупый вопрос, но при отправке формы HTML этот порядок гарантированно соответствует порядку, в котором входные данные формы HTML существуют на соответствующей странице HTML? Пока, похоже, это так, но мне нужно убедиться, что это гарантированное поведение.

Пример:

<form method="post" name="test" action="/upload">
    <input type="hidden" name="param1" value="1" />
    <input type="hidden" name="param2" value="2" />
    <input type="hidden" name="param3" value="3" />
    <input type="file" name="test_file" />
</form>


// Example JAVA ...
// Is the iterator guaranteed to return streams in the order: param1, param2, param3, test_file?
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);

1 Ответ

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

Да, это, в свою очередь, указано в Спецификации HTML-форм W3C - Глава 17.13.4 Типы содержимого форм .Вот выдержка из релевантности (см. Акцент в последнем абзаце):

17.13.4 Типы содержимого формы

...

application / x-www-form-urlencoded

Это тип содержимого по умолчанию.Формы, представленные с этим типом содержимого, должны быть закодированы следующим образом:

Имена и значения элементов управления экранированы.Символы пробела заменяются на '+', а затем зарезервированные символы экранируются, как описано в [RFC1738] , раздел 2.2: не буквенно-цифровые символы заменяются на '%HH', знак процента и две шестнадцатеричные цифры, представляющиекод ASCII персонажа.Разрывы строк представляются в виде пар "CR LF" (т. Е. '%0D%0A').

Имена / значения элементов управления перечислены в порядке их появления в документе. Имя разделяетсяот значения на '=' и пары имя / значение отделяются друг от друга на '&'.

...