从FileEntry(或等效的)获取对象URL

时间:2014-02-19 19:06:04

标签: javascript file-upload blob

我目前正在通过执行以下操作加载已删除的文件:

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);
}

这会让我获得对象网址,然后我可以将其放入音乐播放器中。但是,当迭代输入的文件夹时:

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类型的文件。根据{{​​3}},我将能够file.toURL()并使用它来代替对象网址。这确实给我一个空字符串。 this,但我不知道如何解决这个问题。我看到一些blob URL,但我不知道它会如何工作。 this seems to be there for a reason 尝试将文件和文件夹拖到输出屏幕并自己查看

1 个答案:

答案 0 :(得分:3)

我如何解决它:

来自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代码和大致的行,所以我可以自己去寻找它;)