【发布时间】:2011-04-23 06:24:28
【问题描述】:
在 Opera 中使用 <input type="file" /> 上传一个文件时,它可以正常工作。即在 PHP 服务器端的 $_FILES 中找到预期的文件数据。
但是,当我尝试使用 Opera 一次上传多个文件时,通过设置 <input type="file" min="1" max="999" />,所有文件的内容都会被粘在一个长字符串中并作为 POST 数据发送。此字符串中的所有文件都由以下标头分隔:
------------94QV8HRqBwta8NY4L2WH0r
Content-Disposition: form-data; name="file[]"; filename="xxx1069225496.xml"
Content-Type: text/xml
<?xml>
...
Opera 遵循 Webforms 2.0 标准,我知道。但是有没有一种简单的方法可以让 Opera 以与其他浏览器相同的方式发送多个文件,还是我必须编写一个解释器才能仅从 Opera 获取文件?
感谢您的帮助。下面是我目前使用的 HTML。
<div id="filearea">
<input type="file" min="1" max="6000" accept="text/xml" name="file[]" style="padding: 1px; margin: 2px 0px;" />
</div>
这就是 $_POST 的 var_dump 的样子(我已经删除了所有实际的 XML 数据,占用了空间)
array(1) {
["file"]=>
array(1) {
[0]=>
string(4209) "------------94QV8HRqBwta8NY4L2WH0r
Content-Disposition: form-data; name="file[]"; filename="1219854274.xml"
Content-Type: text/xml
<?xml version="1.0"?>
...
------------94QV8HRqBwta8NY4L2WH0r
Content-Disposition: form-data; name="file[]"; filename="xxx1069225496.xml"
Content-Type: text/xml
<?xml version="1.0"?>
...
------------94QV8HRqBwta8NY4L2WH0r
Content-Disposition: form-data; name="file[]"; filename="xxx1111008062.xml"
Content-Type: text/xml
<?xml version="1.0"?>
...
------------94QV8HRqBwta8NY4L2WH0r
Content-Disposition: form-data; name="file[]"; filename="1219854274.xml"
Content-Type: text/xml
<?xml version="1.0"?>
...
"
}
}
【问题讨论】:
-
另一个问题似乎是为什么 Opera 不允许他选择多个文件。 (因此,可能甚至不属于 SO。)这是关于 PHP 不会处理多个文件的原因。
-
HTML 中没有“min”或“max”这样的属性。这是一个 PHP 的东西,但我不记得当你使用 PHP 时它在浏览器中是如何工作的。
-
实际上它是 WebForms 2.0 标准的东西,而不是 PHP 的东西,而且 afaik 只有 Opera 支持。这就是为什么我将这个问题标记为 Opera,而 Opera 是唯一可以复制我的问题的浏览器。我猜我的解决方案也仅限于 Opera,我可能不得不给 Opera 工作人员发电子邮件来帮助我。