Я пишу розширення для Firefox. Використовуючи javascript, я хочу завантажити двійковий файл з веб-POST, а потім хочу записати його вміст у файл. Моя складність полягає в тому, як перетворити з типу, поверненого Інтернетом, у тип, необхідний для написання:
var c=new XMLHttpRequest();
c.responseType = "arraybuffer";
var data=Uint8Array(c.response);
"Дані" містить двійковий вміст. Щоб записати його у файл:
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 для відповіді № 1Не дуже впевнений, чого ви намагаєтеся досягти тут, але, можливо, це може вам допомогти.
Розширення плакатів для Firefox: http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6
Здається, робиш те, що тобі потрібно
0 для відповіді № 2
Ви можете перетворити його в "звичайний" масив, як це:
var dataArray = Array.prototype.slice.call(data);
Це дозволить вам записати ці дані:
bstm.writeByteArray(dataArray, dataArray.length);
Нібито це перетворення стане непотрібним у Firefox 11, ви зможете проїхати Uint8Array
безпосередньо