QLOOKアクセス解析

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Firefox コード例:ウェブからバイナリ画像をGETしてファイルに保存する

Firefoxアドオンにて、ウェブからバイナリファイル(画像)をダウンロードしてファイルに保存するJavascript例を挙げる。


/******************************************
サーバからバイナリファイルをダウンロードする
*/
var url = "http://blog-imgs-19.fc2.com/k/f/a/kfall/hoge.png";
var request = new XMLHttpRequest();
request.open('GET', url, false);
request.overrideMimeType('text/plain; charset=x-user-defined');
//キャッシュをバイパス(必要ならば)
request.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
req.send(null);
if (req.status != 200) return;
var instream = req.responseText;

/******************************************
バイナリファイルをローカルに出力する
*/
//出力先ディレクトリのパス
var path = "c:\\Users\\ユーザ名\\Desktop\\tmp\\";
//出力先ファイルハンドラの生成
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath(path);
aFile.append("hoge.png");
//出力ストリームの生成
var outstream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
outstream.init(aFile, 0x02 | 0x08 | 0x20, 0664, 0);
//書き出し
outstream.write(instream, instream.length);
if (outstream instanceof Components.interfaces.nsISafeOutputStream) {
outstream.finish();
} else {
outstream.close();
}


XmlRequestとファイルIOについては以下に詳しい。
cf. XMLHttpRequest
cf. Code snippets:File I/O

また、このコードを書くにあたって「Script雑感」の次の記事を参考にさせていただいた。
cf. Script雑感 Ajax:画像を取得して表示する(Firefox)

「Script雑感」ではブラウザに画像をそのまま表示させており、非常に勉強になった。
以下、画像表示部分の引用:

write_binary_file = function(url) {
// 49 => "1" (decimal)
var filestream = load_url(url);
var bytes = [];
for (i = 0; i < filestream.length; i++)
bytes[i] = filestream.charCodeAt(i) & 0xff;
// 改造
var ele = document.createElement('img');
ele.src = 'data:image/gif;base64,'
+ base64.encode(String.fromCharCode.apply(String, bytes));
document.getElementById('testBinery').appendChild(ele);
}

スポンサーサイト

最近の記事

コメント

管理者にだけメッセージを送る

みんなの拡張機能
シリーズ記事一覧
カテゴリ一覧
ブログ内検索
QRコード
QR
プロフィール

くふぉーる

はじめまして。日本のシステムエンジニア「くふぉーる」です。
このブログではできるだけ役立つ記事を掲載することを心がけています。

RSSフィード
このブログについて
・ このブログは全記事リンクフリーです。
・ スパム対策として、トラックバック、コメントは承認制にしてあります。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。