2

我想知道如何进行拖放图像上传。我不明白的是,如何让服务器知道用户何时将图像拖放到某个 div 内或上传到正文中?这是否普遍支持浏览器 ie,ff,chrome,safari。谢谢你 :)

4

2 回答 2

5

我可以告诉你没有做太多的研究。

简短的回答是,不。所有主流浏览器都不支持检测用户何时在客户端窗口内放置图像的方法。

此外,正如 Rajat Saxena 在评论中指出的那样,您必须通过在 drop 事件上发送 ajax 请求来通知服务器文件删除。


HTML5

这是使用 HTML5 和 javascript从桌面拖放到浏览器

<div id="drop_zone">Drop files here</div>
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var files = evt.dataTransfer.files; // FileList object.

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  function handleDragOver(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
  }

  // Setup the dnd listeners.
  var dropZone = document.getElementById('drop_zone');
  dropZone.addEventListener('dragover', handleDragOver, false);
  dropZone.addEventListener('drop', handleFileSelect, false);
</script>

jQuery

这是使用 JQuery(Firefox 和 Chrome)从桌面到浏览器的拖放操作

function ignoreDrag(e) {
  e.originalEvent.stopPropagation();
  e.originalEvent.preventDefault();
}

$('#target')
    .bind('dragenter', ignoreDrag)
    .bind('dragover', ignoreDrag);
    .bind('drop', drop);

function drop(e) {
  ignoreDrag(e);
  var dt = e.originalEvent.dataTransfer;
  var files = dt.files;

  if(dt.files.length > 0){
    var file = dt.files[0];
    alert(file.name);
  }
}

其他插件相关链接(未测试)和问题

于 2012-09-07T21:32:48.653 回答
2

我正在使用Pupload。我不必担心如何实现这种拖放行为,如果浏览器不兼容 html 5,它会优雅地降级。

于 2012-09-08T00:35:09.533 回答