FileWriter API:使用blob写入数据

时间:2011-10-03 07:05:45

标签: javascript html5 fileapi

我有一个像blob:blahblah这样的blob网址指向一个文件。我想将此blob后面的文件写入本地文件系统。 writer.write()文档说它接受一个文件对象(来自input-type-file)一个blob。但是尝试这个时会抛出类型不匹配错误

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

我知道问题是blob没有被接受,但我想知道如何将blob存储到文件系统中。我在输入类型文件的脚本中创建了前面的blob,并将其值存储在var中。

修改

好的,我想我应该首先提供更多代码。

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

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

files来自输入类型文件html标记,我循环了多少个文件。你知道这个演出。

然后变量通过多种媒介,首先通过chrome的消息将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 {1}}。那么如何使用blob的url来存储文件呢?

1 个答案:

答案 0 :(得分:1)

根据您编辑的代码段和说明,听起来您正在将blobURL写入文件系统而不是File本身(例如files[i]['name']是URL)。而是在主页 - >之间传递File对象。其他页面 - >工人 - >主页。截至最近(至少在Chrome中),您的往返行程is now possibleFile个对象可以传递给window.postMessage(),而之前,浏览器将参数序列化为字符串。

使用Blob''塑造'createObjectURL()的处理程序/引用。没有办法从blobURL回到Blob。简而言之,无需创建createObjectURL()。只需直接传递files[i]即可。