【发布时间】:2012-05-02 09:16:46
【问题描述】:
我正在尝试通过拖放实现原生 HTML5 多个文件上传。 我一直在关注诸如 http://onehub.com/blog/posts/designing-an-html5-drag-drop-file-uploader-using-sinatra-and-jquery-part-1/ 和 http://www.html5rocks.com/en/tutorials/file/dndfiles/ 但我还没有找到我需要的解决方案。
基本上,我想模拟 HTML5 多文件上传输入元素的功能,但我在女巫上使用 div 来监听放置事件。
也就是说,我想做一个这样的表格:
<form method="post" action="somesscript.php" enctype="multipart/form-data">
<input type="text" />
<div class="drop">
<p>Drop files here</p>
</div>
<input type="submit" />
</form>
像这样工作:
<form method="post" action="somesscript.php" enctype="multipart/form-data">
<input type="text" />
<input name="filesToUpload[]" type="file" multiple />
<input type="submit" />
</form>
拖放字段应该被视为表单的一部分,当提交表单时,我只想发送来自输入的所有数据以及来自拖放字段的文件数组通过 AJAX 到服务器。
到目前为止,我只实现了在放置事件上读取文件名。我希望将所有删除的文件添加到一个数组中,但我不知道如何访问文件本身,而不是它们的属性,以便后者我可以通过 AJAX 将这个文件数组与其余的一起发送到表单提交中表格数据。
我想要类似的东西:
var data = e.originalEvent.dataTransfer,
files = data.files,
filesArray = [],
filesLength = files.length,
i;
for ( i = 0; i < filesLength; i++ ) {
var file = files[i];
filesArray.push(file);
}
return filesArray;
另外,我知道有这方面的插件,但我想在本地做。
【问题讨论】:
-
你找到解决方案了吗,@Husar?
-
是的,我将文件保存在一个数组中。唯一的问题是使用 AJAX 与其他表单字段一起发送。我设法使用 FormData (developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData) 功能来做到这一点。
标签: jquery ajax html drag-and-drop