我目前正在通过以下方式加载已删除的文件:

var files = e.dataTransfer.items;
for (var i = 0; i < files.length; i++) {
    var file = files[i]; //typeof is 'DataTransferItem'
    var url = URL.createObjectURL(file);
}

这为我提供了对象url,然后可以将其放入音乐播放器中。但是,当遍历输入的文件夹时:
var reader = entry.createReader();
reader.readEntries(function (res) {
    res.forEach(function (entry) {
        console.log('The entry:', entry);
        console.log('The url:', JSON.stringify(entry.toURL()));
    });
});

我得到了FileEntry类型的文件。根据this,我将能够执行file.toURL()并使用它代替对象url。这确实返回了一个空字符串。 this seems to be there for a reason,但我不知道如何解决此问题。我看到了有关Blob URL的信息,但我不知道该如何工作。
Example
尝试将文件和文件夹拖到输出屏幕,然后自己查看

最佳答案

我如何解决它:

从typeof FileEntry的条目开始,我们可以做.file(callback),其中回调中的第一个参数是File类型,然后我们可以从以下项中创建一个objectURL:

var reader = entry.createReader();
reader.readEntries(function (res) {
    res.forEach(function (entry) {
        entry.file(function(file){ //this does the trick
            var obj = URL.createObjectURL(file);
        }
    });
});

非常感谢dandavis,他为我提供了他的JavaScript代码和大概的行,以便我自己去寻找它;)

09-11 18:25