Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拖放文件上载_Javascript_Html - Fatal编程技术网

Javascript 拖放文件上载

Javascript 拖放文件上载,javascript,html,Javascript,Html,我使用html标记在web应用程序中使用文件上载。我的功能可以很好地从文件选择器中选择一个文件并提交该文件,但是现在我想在拖放事件中上载一个文件,即用户从其计算机上的某个位置拖动一个文件,当他将其拖放到我网页的某个特定部分时,该文件开始上载 直到现在,我还是设法通过 function drop(evt) { evt.stopPropogation(); evt.preventDefault(); if (containsFiles(

我使用
html标记在web应用程序中使用文件上载。我的功能可以很好地从文件选择器中选择一个文件并提交该文件,但是现在我想在拖放事件中上载一个文件,即用户从其计算机上的某个位置拖动一个文件,当他将其拖放到我网页的某个特定部分时,该文件开始上载

直到现在,我还是设法通过

  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呢?

您必须使用(注意IE支持)

当删除发生时,您需要创建FormData对象,并将数据附加到其中,然后将该表单发布到您的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);
  }
}
功能下降(evt){
evt.stopPropogation();
evt.preventDefault();
var files=evt.dataTransfer.files;
如果(files.length>0){
var form=new FormData();
对于(变量i=0;i

注意我只在Chrome和Firefox上测试过它,IE9可能不起作用,但IE10应该,如果你测试过,请告诉我们。

我相信你想要的是喜欢的东西


我还没有尝试过,但它是一个库,可以轻松地将文件拖放到运行它的网站上,v3.0不需要使用jQuery。

请看一看,或者,如果您正在寻找一个支持良好的跨浏览器库来为您完成所有这一切,请看一看。完整披露:我维护Fine Uploader。Fine Uploader看起来像一个很好的插件!我将深入研究它,并尝试将其与我的web应用程序集成。谢谢@Ray Nicholus的帮助:)@Bernice没问题。如果您需要技术支持、发现错误或对新功能有想法/需要,请务必查看。不确定为什么有人否决了此答案。这是一个好的开始。需要详细说明吗?我在单页CMS中使用这种方法,用于类似API的应用程序,它工作得非常出色。关于否决票。请问是谁做的,提供什么和为什么的信息?谢谢@MaksimsMihejevs我刚刚尝试了这个,它正在提交我想要的数据。我现在唯一需要的是使用Ajax,这样我可以立即刷新页面,用户可以看到文件已上载。您实际上不需要刷新页面,因为上传后,服务器可以响应文件路径以及您需要的任何额外数据,然后在
.onload
中,您将收到这些数据,并且可以很容易地使用JavaScript更新前端,因此在不需要刷新的情况下进行更新会更好。但是,由于我需要立即显示带有上载文件和缩略图视图的表,所以我需要刷新页面。