我正在写一个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”中写“数据”,但我发现这样做的唯一方法是非常慢:
for(var i=0; i<data.length; i++)
bstm.write8(data[i]);
这样可行,但对于中等大小的文件来说速度非常慢。 有没有更好的方法呢? 感谢。
答案 0 :(得分:0)
不确定你想在这里实现什么,但也许这可以帮助你。
Firefox的海报扩展程序:http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6
似乎正在做你需要的事情
答案 1 :(得分:0)
您可以将其转换为“常规”数组,如下所示:
var dataArray = Array.prototype.slice.call(data);
这将允许您写出该数据:
bstm.writeByteArray(dataArray, dataArray.length);
据称,此次转化will become unnecessary in Firefox 11,您可以直接传递Uint8Array
。