2013-07-25 67 views
4

我有一个表单生成器,我想添加拖放文件功能。发送拖放文件到输入类型文件元素

我被卡住的地方在于所有我遇到的资源在丢失时通过xhr上传图片。我希望图像一直存在,直到表单被提交。

理想情况下,event.dataTransfer.files[0]对象将被转移到<input type="file" ...value="[dropped-file]">元素。

目前我无法做到这一点。他们使用兼容的数据类型吗?

+0

为什么使用XHR会出现问题?只需在提交表格后发送请求,或者通过ajax提交整个表格和/或文件。请阅读[FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData)了解更多信息。 –

+0

我的理解是,FormData不适用于较老的(8-9)IE。我错了吗? – emachine

+0

这是真的(FormData在这些浏览器中不存在),但无关紧要,因为无论如何您都无法通过拖放在这些浏览器中上传文件。 –

回答

3

您可以在发生拖放事件后创建并发送表单,然后用户单击conf按钮。下面是它的要点:(未测试)。

function uploadFile(file) { 
    var form = new FormData(), 
     xhr = new XMLHttpRequest(); 

    form.append('media', file); 
    xhr.open('POST', '/myurl/'); 

    xhr.onprogress = function(e) { 
     showProgress(); 
    } 

    xhr.onload = function(e) { 
     showSuccessConf(); 
    } 

    xhr.send(form); 
} 

uploadFile(event.dataTransfer.files[0]); 
+0

希望通过普通的$ _POST发送它,但我可能不得不切换到xhr选项。谢谢回复。 – emachine

+0

这将发送POST请求。就您的服务器而言,表单提交和通过POST使用XHR发送的FormData对象之间没有区别。 –

+1

这并没有真正回答这个问题。我希望能够通过通常的文件输入或通过拖放到自定义区域来上传文件。在任何情况下,表单都有几个输入字段,文件输入只是其中的一个,所以我想以传统方式提交整个表单:使用简单的表单提交。 – Ariel

相关问题