从<input type =“ file” />按钮获取目录树

时间:2019-10-14 22:26:09

标签: javascript html

可以使用以下代码拖放文件夹(例如,上载包含所有文件的整个子目录树):

function DragAndDrop_Handler(e) {
    e.preventDefault();

    var items = e.dataTransfer.items;
    for (var i=0; i<items.length; i++) {        
        var item = items[i].webkitGetAsEntry();  //Might be renamed to GetAsEntry() in 2020
        if (item) {
            GetFileTree(item);
        }
    }
}

function GetFileTree(item, path) {
    path = path || "";
    if (item.isFile) {

        item.file(function(file) {
            console.log(file);
            UploadFile(file);
        });

    } else if (item.isDirectory) {

        console.log(item.fullPath);  //console.log(item.name)
        MakeDirectory(item);

        // Get contents of the subdirectory
        var dirReader = item.createReader();
        dirReader.readEntries(function(entries) {
            for (var i=0; i<entries.length; i++) {
                GetFileTree(entries[i], path + item.name + "/");
            }
        });
    }
}

问题:如何使用标准的文件/目录选择器完成相同的功能?例如:

<input id="BrowseButton" type="file" onchange="FileSelect_Handler(e)" multiple/>

问题是,从 Drag&Drop 操作调用时,........_Handler()收到一个事件,其中包含类型为e.dataTransfer.items的{​​{1}},但是它收到的事件仅包含从标准“文件/目录选择”按钮调用时,类型为DataTransferItemList的{​​{1}}。 e.target.files数据类型包含任何子目录信息。

我很难相信通过标准的“文件/目录选择”按钮(打开标准的“文件/目录浏览”对话框)不可能获得目录或目录树...但是通过 Drag&Drop 操作可以实现。

0 个答案:

没有答案