我正在写一个Firefox扩展。使用javascript,我想从web POST下载一个二进制文件,然后我想把它的内容写入一个文件。我的困难是如何从网络返回的类型转换为写入所需的类型:
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]);
这个可以工作,但是对于中等大小的文件来说速度很慢。有更好的方法吗?谢谢。
不太确定你想要达到什么目的,但也许这可以帮助你。
Firefox海报扩展:http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6
它似乎正在做你需要的
您可以将其转换为"常规"数组,如下所示:
var dataArray = Array.prototype.slice.call(data);
这将允许你写出数据:
bstm.writeByteArray(dataArray, dataArray.length);
这个转换在Firefox 11中将不再需要,你可以直接传入Uint8Array