Hatena::ブログ(Diary)

k12uのアレ RSSフィード

2006-12-16

[]JavaScriptバイナリファイルの中身にアクセスできた

参考資料(というか主要なアイデアほとんど全部)はこちら。

http://mgran.blogspot.com/2006/08/downloading-binary-streams-with.html

何に使うのかはこれから考える。

でかいファイルを食わせてループでString.fromCharCodeを回したらFirefoxが死んでしまったのでそこだけ注意。

(mal_blueさん,nanto_viさんに直して頂いたコード版)

<html><head>
<script>
load_url = function(url) {
    var req = new XMLHttpRequest();
    req.open('GET',url,false);
    //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
    req.overrideMimeType('text/plain; charset=x-user-defined');
    req.send(null);
    if (req.status != 200) return '';
    return req.responseText;
}

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;
  document.write(String.fromCharCode.apply(String, bytes));
}

</script></head><body>
<script>
  write_binary_file('読みたいファイルのURLをここに書く。')
</script>

</body></html>

追記:参考資料として用いたURLによると

If you use the code above, please leave the comment about the author (me) for recognition of the many hours of labor to find this out. Please bear in mind that even though it worked for me and I'm making this code available in the hope it may help you too, I do not take any responsibility for any problems this code may cause to you or your project!

とのことですので、ご利用になる方はご注意ください。

mal_bluemal_blue 2007/01/01 03:34 enablePrivilege の行は削除した方がいい。なくてもできるし。
(Fx の特権取得なので。普通は有効にならないが)

k12uk12u 2007/01/01 12:23 ありがとうございます。調べる時間が無く訳のわからぬまま放置していましたがすっきりしました。

brazilbrazil 2007/01/03 07:08 「利用の際はコメントを残して!」っていうのも、書いておいてあげるといいかも。すんません、細かいこと言って。

k12uk12u 2007/01/03 21:12 ごもっともなことです。そのようにしました。

nanto_vinanto_vi 2007/01/05 01:46 ファイルの内容をテキストとして出力するなら
for (i = 0; i < filestream.length-1; i++){
var abyte = filestream.charCodeAt(i) & 0xff;
document.write(String.fromCharCode(filestream.charCodeAt(abyte)));
}
ではなく
for (i = 0; i < filestream.length; i++){
var abyte = filestream.charCodeAt(i) & 0xff;
document.write(String.fromCharCode(abyte));
}
ではないでしょうか?
また、大きなファイルだと落ちるというのは、以下のようにString.fromCharCodeとdocument.writeの呼び出し回数を減らすことで改善されると思います。
var bytes = [];
for (i = 0; i < filestream.length; i++)
bytes[i] = filestream.charCodeAt(i) & 0xff;
document.write(String.fromCharCode.apply(String, bytes));

k12uk12u 2007/01/05 03:13 追加したコードの品質に問題があることは判っていたのですが勝手がわからず放置しておりました。思いがけず直して頂きありがとうございます。

HiFaHiFa 2007/02/28 23:15 はじめまして、こちらのコードを使って画像を取得してブラウザに表示させてみました。
http://zombiebook.seesaa.net/article/34873787.html

k12uk12u 2007/03/01 00:13 ありがとうございます。何か応用ができたらぜひ教えてください。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証