4

我很清楚你不能通过拖放上传整个文件夹。问题是,我如何判断是否有人尝试这样做?如果你将一个文件夹拖到浏览器中,它的行为就像你拖一个带有 webkit 不知道的扩展名的文件一样,比如“.sh”。你怎么能分辨出来?

我已经在 Mac OS X 和 Windows 上的 Chrome、Safari 和 Firefox 中对此进行了测试。根据浏览器和操作系统,我得到的结果略有不同。有时它会成功上传零字节文件。有时它会上传文件夹的图片。有时它无法上传任何内容。

event.dataTransfer.types 和 event.dataTransfer.items 都撒谎并分别说类型是“文件”或“文件”。

Firefox 给出了以下类型列表:

{"0":"application/x-moz-file","1":"text/x-moz-url","2":"text/plain","3":"Files"}
4

3 回答 3

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)
于 2012-09-27T01:17:25.033 回答
-1

在 FF 中有一个 dataTransfer 方法:mozGetDataAt (type, index),当我使用 type 'text/x-moz-url' 时,它会返回文件的路径,如 'files:///D:/abc/fileName'。有趣的是,文件夹/指令的路径末尾带有“/”,例如“files:///D:/abc/folder1/”。我想知道它是否适用于这种情况?

于 2015-08-31T08:38:14.460 回答
-2

实际上,当您将文件夹拖到浏览器上时,您拖动的文件夹中的所有文件夹和文件都会显示出来..

例如在铬

它将显示“D:\my documents\Downloads\ 的索引”以及您修改文件的名称、大小和日期...

于 2012-09-27T00:11:22.523 回答