嗨:我正在寫一個firefox擴展(我的第一個),其中,獲取圖像url讀入一個字節數組,然後寫出該二進制信息到文件。我已經使用this example,看起來好像它可以工作,但是文件不正確,就好像它已經執行了某種字符轉換。從JavaScript(火狐插件)寫入二進制數據
我的版本如下:
testWriteBinaryFile : function (dir, filename, data) {
var aFile = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath("/home/mike/mypicture.gif");
aFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600);
Firebug.Console.log("Binary writing: file set up");
var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].
createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(aFile, 0x04 | 0x08 | 0x20, 0600, 0); // readwrite, create, truncate
Firebug.Console.log("Binary writing: stream set up");
Firebug.Console.log("Data length: " + data.length);
Firebug.Console.log("Data byte 0: " + data[0].toString(16));
Firebug.Console.log("Data byte 1: " + data[1].toString(16));
Firebug.Console.log("Data byte 2: " + data[2].toString(16));
Firebug.Console.log("Data byte 3: " + data[3].toString(16));
Firebug.Console.log("Data byte 4: " + data[4].toString(16));
stream.write(data, data.length);
Firebug.Console.log("Binary writing: stream written")
if (stream instanceof Components.interfaces.nsISafeOutputStream) {
stream.finish();
} else {
stream.close();
}
Firebug.Console.log("Binary writing: done.");
}
我知道數據緩衝區本身是印刷出來的前幾個字節確定,但該文件是完全不同的,一旦在磁盤上。任何想法或任何其他方式寫出二進制文件?
我知道這是一個同步寫入,但文件很小,(20Kb)...但這是唯一的例子。如果我能解決這個問題,我已經完成了擴展!任何和所有幫助表示讚賞。
您的第一個解決方案正常工作。我有一種預感,需要進行某種轉變。非常感謝你的幫助,一束鮮花正在進行中! (我確實先嚐試了第二種解決方案,但它被卡在了writeByteArray上,我會再試一次。) – djnz0feh 2012-02-17 11:18:00