ヨーキョクデイ

いろいろ雑食

ローカルファイルを Base64 エンコードしたい

たぶんこんな感じ。

var path = "D:\\hoge\\fuga.xxx";
var localFile = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
localFile.initWithPath(path);

var fileInputStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
                .createInstance(Components.interfaces.nsIFileInputStream);
fileInputStream.init(localFile, 0x01, 0444, 0);

var binaryInputStream = Components.classes["@mozilla.org/binaryinputstream;1"]
                .createInstance(Components.interfaces.nsIBinaryInputStream);
binaryInputStream.setInputStream(fileInputStream);

var byteArray = binaryInputStream.readByteArray(binaryInputStream.available());

fileInputStream.close();

var uriEncoded = [];
for(var i = 0; i < byteArray.length; i++){
    if(byteArray[i] < 16){
        uriEncoded.push("%0" + byteArray[i].toString(16));
    }
    else{
        uriEncoded.push("%" + byteArray[i].toString(16));
    }
}

// http://nanto.asablo.jp/blog/2006/10/23/572458
// toUTF8Octets って関数のパクリ
var result = btoa(unescape(uriEncoded.join("")));

alert(result);

追記。ストリーム閉じ忘れてたぜ。
さらに追記。16 進変換のところがマズいことになってたぜ。