ServletFileUpload - ItemIterator的顺序

时间:2011-07-06 04:26:53

标签: java html servlets file-upload

我使用commons FileUpload作为自定义上传器实现的一部分。特别是,我使用的是ServletFileUpload和Streaming API(http://commons.apache.org/fileupload/streaming.html)。 ServletFileUpload中getItemIterator()方法的API表示保证返回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 个答案:

答案 0 :(得分:2)

是的,这又在W3C HTML Forms Spec - Chapter 17.13.4 Form content types中指定。以下是相关性的摘录(参见最后一段的重点):

  

17.13.4表格内容类型

     

...

     

应用程序/ x-WWW窗体-urlencoded

     

这是默认内容类型。使用此内容类型提交的表单必须按如下方式编码:

     

转义控件名称和值。空格字符将替换为'+',然后按[RFC1738]第2.2节中所述转义保留字符:非字母数字字符替换为'%HH',百分号和两个十六进制数字代表字符的ASCII码。换行符表示为“CR LF”对(即'%0D%0A')。

     

控件名称/值按照它们在文档中出现的顺序列出。名称与值'='分隔,名称/值对彼此分开'&'