我非常清楚你不能通过拖放上传整个文件夹。问题是,如何判断某人是否尝试这样做?如果您将一个文件夹拖到浏览器中,它的行为就像拖动一个带有webkit不知道的扩展名的文件,就像'.sh'一样。你怎么能分辨出来呢?
我已经在Mac OS X和Windows上的Chrome和Safari以及Firefox中对此进行了测试。根据浏览器和操作系统的不同,我会得到略有不同的结果。有时它会成功上传零字节文件。有时它会上传文件夹的图片。有时它无法上传任何内容。
event.dataTransfer.types和event.dataTransfer.items都说谎并且分别说“File”或“file”。
Firefox提供了以下类型列表:
{"0":"application/x-moz-file","1":"text/x-moz-url","2":"text/plain","3":"Files"}
答案 0 :(得分:1)
我找到了办法。这些信息可以通过getAsEntry在dataTransfer.items中找到,尽管在不同的浏览器中它们有点不同。此外,这没有指向您想要的文件的指针,尽管您可以根据文件名找出它,假设您没有同时上传两个具有相同名称的文件。在这里工作并不多,所以这是我能做的最好的事情。
just_the_files = (dataTransfer) ->
real_files_set = {}
for item in dataTransfer.items
entry = item.getAsEntry?() or item.webkitGetAsEntry?() or item
if entry.isFile
real_files_set[entry.name] = true
(file for file in dataTransfer.files when file.name of real_files_set)
答案 1 :(得分:-1)
实际上当您将文件夹拖到浏览器上时,将显示您拖动的文件夹中的所有文件夹和文件..
例如在chrome
中它会显示“D:\ my documents \ Downloads \”的索引以及修改文件的名称,大小和日期......
答案 2 :(得分:-1)
在FF中有一个dataTransfer的方法: mozGetDataAt (类型,索引),当我使用类型'text / x-moz-url'时,它返回文件的路径,如'files:/ // d:/ ABC /文件名”。有趣的是,文件夹/指令在末尾有一个带'/'的路径,如'files:/// D:/ abc / folder1 /'。我想知道它是否适用于这种情况?