2

我正在使用 input type='file' 多个元素,但是为了服务器端的限制,我一次只能上传一个文档。所以我正在努力寻找一种方法来做到这一点,同时只保留单个文件输入元素......我认为我唯一的选择是使用自己的隐藏文件输入元素创建多个表单,并且当我循环浏览文件时以某种方式设置隐藏输入字段的值,但我不确定如何。有什么推荐吗?这是我到目前为止所拥有的:

HTML:
<form method='POST' id='frmUploadDoc' enctype='multipart/form-data' target='hiddenIframe' action='/wle/rest'>
    <input type="file" name="data" multiple="multiple" id="filesInput">
    <input type="submit" value="Submit"/>
</form>
<iframe name="hiddenIframe" id="hiddenIframe" style="display: none;">

JAVASCRIPT:
function handleFileSelect(evt) {      
    var files = evt.target.files; // FileList is a FileList of File objects.  
    var output = [];
    var actionText;
    for (var iCount = 0, f; f = files[iCount]; iCount++) {
       actionText="/wle/rest?action=addDocument&name=" + iCount   //This creates the unique action URL for each individual form  
       $("#frmUploadDoc").attr("action", actionText);
       output.push("<li><strong>", f.name, "</strong></li>");
       postDocumentToWLE(iCount);            
    }
    document.getElementById('listDocs').innerHTML = '<ul>' + output.join('') + '</ul>';
  }
4

2 回答 2

0

经过大量研究,大卫似乎是正确的,通过 iframe 通过 POST 上传表单是不可能上传多个文件的。HTML5 允许多文件上传,但如果您需要单独发送每个文件,则无法使用多文件输入。

于 2013-01-09T17:17:00.710 回答
0

未经测试,但根据您对浏览器支持的要求,您应该能够使用 FormData 来实现。

您可以通过读取 files 属性访问在具有 multiple 属性的输入字段中选择的所有文件:

var files = document.getElementById('input').files;

然后,您可以遍历文件,为每个文件创建一个 FormData 对象并发出一个 AJAX 请求,一次一个。有关代码示例的更详细说明:https ://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

但请记住,并非所有浏览器都支持 FormData 对象。但是话又说回来,所有浏览器也不支持多属性...

于 2013-02-01T09:46:52.667 回答