3

我有一个blob:blahblah指向文件的blob url。我想将此 blob 后面的文件写入本地文件系统。writer.write()文档说它接受一个文件对象(来自输入类型文件)和一个blob。但是尝试此操作时会引发类型不匹配错误

fileEntry.createWriter(function(writer) {
    writer.write(blob); //blob is a var with the value set to the blob url

我知道问题是blob没有被接受,但我想知道如何将 blob 存储到文件系统。我之前在脚本中从 input-type-file 创建了上述 blob,并将其值存储在 var 中。

编辑

好的,所以我认为我应该首先给出更多代码。

首先我创建一个blob url并将其存储在这样的var中

files[i]['blob'] = window.webkitURL.createObjectURL(files[i]);

files来自输入类型文件 html 标记,并且 i 循环显示文件数。你知道演出。

然后变量通过多种媒介,首先通过 chrome 的消息将 api 传递到另一个页面,然后从该页面通过 api 传递给工作人员postMessage,最后通过postMessage再次返回父页面。

在最后一页上,我打算使用它通过像这样的文件系统 api 将 blob 的文件存储到本地文件系统。

//loop code
fileSystem.root.getFile(files[i]['name'], {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(writer) {
        writer.write(files[i]['blob']);
    });
});
//loop code

但是writer.write投掷Uncaught Error: TYPE_MISMATCH_ERR: DOM File Exception 11

我相信这个错误是因为提供给的变量writer.write是文本而不是来自类似createObjectUrl(直接而不是在通过多个页面/范围之后)的 blob 对象,或者不是window.WebKitBlobBuilder. 那么如何使用 blob 的 url 来存储文件呢?

4

1 回答 1

1

从您编辑的代码片段和描述来看,听起来您正在将 blobURL 写入文件系统而不是其File本身(例如files[i]['name'],是一个 URL)。相反,File在主页面 -> 其他页面 -> 工作人员 -> 主页面之间传递对象。最近(至少在 Chrome 中),您的往返旅行现在是可能的File对象可以传递给window.postMessage(),而在此之前,浏览器将参数序列化为字符串。

您“塑造”处理程序/对Blobwith的引用createObjectURL()。从 blobURL 回到Blob. 所以简而言之,不需要创建createObjectURL(). 直接绕过去就好了files[i]

于 2011-10-11T16:42:55.140 回答