我使用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);
答案 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'
)。控件名称/值按照它们在文档中出现的顺序列出。名称与值
'='
分隔,名称/值对彼此分开'&'
。