【问题标题】:ServletFileUpload - order of ItemIteratorServletFileUpload - ItemIterator 的顺序
【发布时间】:2011-09-29 07:28:18
【问题描述】:

我正在使用 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);

【问题讨论】:

    标签: java html servlets file-upload


    【解决方案1】:

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

    17.13.4 表单内容类型

    ...

    应用程序/x-www-form-urlencoded

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

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

    控件名称/值按照它们在文档中出现的顺序列出。 名称与值之间用'=' 分隔,名称/值对之间用@987654328 分隔@。

    【讨论】:

    • 谢谢!这正是我一直在寻找的。我会给你 +1,但显然我的 ID 太新,无法投票。
    • 不客气。没问题,它只需要至少 15 个声望(换句话说,至少 3 个问题投票)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2014-07-20
    • 2021-07-22
    • 2015-10-20
    • 2012-10-14
    • 2012-12-02
    相关资源
    最近更新 更多