2011-10-03 110 views
2

我有一个像blob:blahblah这样的指向文件的blob url。我想将这个blob后面的文件写入本地文件系统。 writer.write()文档说它接受一个文件对象(来自输入类型文件) blob。不过,试试这个FileWriter API:使用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,并将其存储在一个VAR这样

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

files是从输入型文件,HTML标记,我被循环的文件的数量。你知道演出。

则变量经历了一些媒体的,先通过Chrome的消息通过postMessage通过postMessage再次通过API到另一个页面,然后从页面到工人,最后回到父页面。

最后一页上

我打算用它通过文件系统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(直接而不是通过多个页面/范围之后)或不是window.WebKitBlobBuilder之类的blob对象。那么一个blob的url如何被用来存储文件呢?

+0

请浏览器,版本和错误文本。 – c69

+0

文件API只适用于铬。版本是稳定的,错误并不重要,因为它是一个有效的错误,我正在寻找一种方法来正确地做到这一点。无论如何..'TYPE_MISMATCH_ERR' – Achshar

+0

我没有在规范中看到这样的错误, - 因此无论规范是否过时,或者您做错了什么,或者在Chrome中存在错误。 http://dev.w3.org/2009/dap/file-system/file-writer.html – c69

回答

1

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

您'时尚'处理者/参考BlobcreateObjectURL()。没有办法从blobURL返回到Blob。所以总之,不需要创建createObjectURL()。直接通过files[i]即可。

+0

但是这些仅适用于工人..对吗?(即文件对象会通过chrome的消息传递api吗?[他们没有'不过最后一次我检查过,但是这是几个星期前,也许在最近的每晚构建中有一些变化])我的文件对象首先从索引页面转到后台页面,然后转到工作人员。在后台页面,但我可以将它移动到索引,如果没有其他方式..:O – Achshar

+0

是的,你可以通过文件对象到工作人员吧。 – ebidel

+0

嗯,你似乎误解:(我知道我们现在可以做到,什么我问是否可以通过chrome的消息传递api将它们从索引页发送到背景页?coz文件对象在索引页上创建,但工作人员在背景页上:) – Achshar

相关问题