Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FileWriter API:使用blob写入数据_Javascript_Html_Fileapi - Fatal编程技术网

Javascript FileWriter API:使用blob写入数据

Javascript FileWriter API:使用blob写入数据,javascript,html,fileapi,Javascript,Html,Fileapi,我有一个指向文件的blob url,如blob:blahblah。我想将这个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 url,如
blob:blahblah
。我想将这个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存储到文件系统中。我在前面的脚本中从输入类型文件创建了上述blob,并将其值存储在一个var中

编辑

好的,我想我应该首先给出更多的代码

首先,我创建一个blobURL并将其存储在一个变量中,如下所示

files[i]['blob'] = window.webkitURL.createObjectURL(files[i]);
文件
来自一个输入类型的文件html标记,i是循环的文件数。你知道那场演出

然后该变量通过多种媒介,首先通过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错误:类型不匹配\u错误:DOM文件异常11


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

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


您可以使用
createObjectURL()
Blob
的处理程序/引用进行“格式化”。从blobURL回到
Blob
真的没有办法。因此,简而言之,无需创建
createObjectURL()
。直接传递
文件[i]

浏览器、版本和错误文本。文件api仅在chrome中有效。版本是稳定的,错误并不重要,因为这是一个有效的错误,我正在寻找一种正确的方法。无论如何<代码>类型\u不匹配\u错误我在规范中没有看到这样的错误,-所以要么规范已经过时,要么你做错了什么,要么chrome中有错误。我成功地将水滴保存到FS。您是如何创建blob的?这个例子适用于我:@ebidel我使用
createObjectURL
创建blob。当我将url粘贴到url栏中时,BLOB就会工作。在这个例子中,blob是动态创建的。。我有一个变量,它的值是blobURL。我认为这是两种不同的情况。在该示例中,将数组缓冲区附加到空白blob中,我使用
createObjectURL
从输入文件创建blob,并将其存储在变量中以供以后使用。变量只是文本,而不是blob对象。这是blob url的文本。但这些仅适用于工人。。正确的?(也就是说,文件对象会通过chrome的消息传递api吗?[我上次检查时没有,但那是几周前的事了,也许最新的夜间构建有一些变化])我的文件对象首先从索引页转到后台页,然后再转到工作人员。。在后台页面中实现worker是有意义的,但如果没有其他方法,我可以将其移动到索引中..:OYep,你现在可以将文件对象传递给Workers了。嗯,你似乎误解了:(我知道我们现在可以做到,我想问的是,我可以用chrome的消息传递api将它们从索引页发送到背景页吗?因为文件对象是在索引页上创建的,而worker在背景页上:)