我正在写一个Firefox扩展。使用javascript,我想从web POST下载一个二进制文件,然后把它的内容写到一个文件中。我的困难在于如何将web返回的类型转换为需要编写的类型:
var c=new XMLHttpRequest();
c.responseType = "arraybuffer";
var data=Uint8Array(c.response);"data“包含二进制内容。要将其写入文件,请执行以下操作:
var file= FileUtils.getFile("ProfD", ["somefile"]);
var ostm= FileUtils.openFileOutputStream(file);
var bstm= Cc['@mozilla.org/binaryoutputstream;1'].createInstance(Ci.nsIBinaryOutputStream);
bstm.setOutputStream(ostm);然后我需要在"bstm“中写"data”,但我发现这样做的唯一方法是非常慢的:
for(var i=0; i<data.length; i++)
bstm.write8(data[i]);这是可行的,但对于中等大小的文件来说,它非常慢。有没有更好的方法呢?谢谢。
发布于 2012-01-02 20:26:44
我真的不确定你想在这里实现什么,但也许这能帮到你。
火狐的海报扩展:http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6
它似乎正在做你需要的事情
发布于 2012-01-10 21:55:09
您可以将其转换为“常规”数组,如下所示:
var dataArray = Array.prototype.slice.call(data);这将允许您写出该数据:
bstm.writeByteArray(dataArray, dataArray.length);假设这个转换为will become unnecessary in Firefox 11,你将能够直接传入Uint8Array。
https://stackoverflow.com/questions/8700710
复制相似问题