拖放文件上传
Drag and Drop File Uploading
我在web应用程序中使用<input type="file" />
html标记进行文件上传。我的功能可以很好地从文件选择器中选择文件并提交文件,但现在我想在拖放事件中上传文件,即用户从计算机上的某个位置拖动文件,当他将文件放在我网页的特定部分时,文件开始上传。
到目前为止,我设法通过从投递事件中读取了文件
function drop(evt)
{
evt.stopPropogation();
evt.preventDefault();
if (containsFiles(evt))
{
var files = evt.dataTransfer.files;
var count = files.length;
// Only call the handler if 1 or more files was dropped.
if (count > 0)
// upload files
}
}
}
但是我怎样才能上传这些文件呢?出于安全原因,我无法更改input-type=file的值。那么,如何将这些文件传递给servlet呢?
您必须使用FormData(注意IE支持)。
当拖放发生时,您需要创建FormData对象,并将数据附加到其中,然后POST将该表单添加到您的url中。它是异步方法,不会重新加载页面。
function drop(evt) {
evt.stopPropogation();
evt.preventDefault();
var files = evt.dataTransfer.files;
if (files.length > 0) {
var form = new FormData();
for(var i = 0; i < files.length; ++i) {
var file = evt.dataTransfer.files[i];
form.append('image_' + i, file, file.name);
}
var req = new XMLHttpRequest();
req.open('POST', '/pathToPostData', true);
req.onload = function(evt) {
console.log(req.responseText);
}
req.send(form);
}
}
注意我只在Chrome和Firefox中测试过它,IE9可能不起作用,但IE10应该,如果你测试它,请告诉我们
我相信你想要Dropzone.js 的点赞
我还没有尝试过,但它是一个库,可以轻松地将文件拖放到运行它的网站,v3.0不需要使用jQuery。
相关文章:
- html5拖放文件-在提交整个表单时上传
- 拖放文件上传无需AJAX,在前台同步
- 为什么这个文件上传拖放不起作用,我完全复制了 CodePen 代码
- Jstree在拖放后将树保存到xml文件中
- 文件上载(拖放)无法工作
- 拖放文件时,dataTransfer.items属性在Firefox和IE中未定义,但在Chrome中未定义
- 上传文件时检测到已取消的拖放操作
- HTML5拖放:使用JavaScript在文本框中加载文本文件
- 将普通表单与文件输入与拖放区相结合
- HTML5拖放文件字段
- 从单独的文件加载拖放区不会加载
- JavaScript/HTML5/jQuery 拖放上传 - “未捕获的类型错误:无法读取未定义的属性'文件
- 使用拖放区将文件直接上传到 Azure Blob 存储(使用 SAS).js
- 当拖放区域中没有文件时禁用“提交”按钮
- 拖放以克隆原始文件
- 使用 nodejs 上传文件,使用拖放区快速和角度
- 我如何通过Chrome扩展模拟文件拖放上传
- 我可以使用HTML5通过单个文件拖放多个文件吗?
- AngularJS文件拖放指令
- Javascript -双文件拖放事件触发