• ベストアンサー

Ajaxから画像ファイルへのリクエスト

こんにちは。 現在、prototype.jsを使用してAjaxについて勉強をしています。 【質問】 画像ファイルへAjax.Requestを使用してリクエストを送信した場合、JavaScriptでは受信したバイナリデータを扱う事は出来ないのでしょうか。 【サンプルコード】 new Ajax.Request("hoge.gif", { method: "get", onSuccess:function(httpObj){ var body = httpObj.responseBody; } }); ※ 変数bodyにバイナリデータが入っていると思ってます。 色々調べて周ってみたのですが、画像等のバイナリファイルへリクエストを送信している様な例が無かったので、Ajaxでの通信はテキストデータのやりとりを前提としているのかなと、勝手に予測してみたのですが、どうなんでしょうか。 下記サイトでHttpRequestオブジェクトについて調べてみても、MIMEを取って来れなさそうだったので、やはり扱え無いのかなと思いました。 http://www.devguru.com/Technologies/xmldom/quickref/obj_httpRequest.html あと、余談ですが上記サンプルコードの変数bodyをtypeof()に渡すとunknownになるのですね。。。(IE6) 質問は以上です。 どなたか、暇な時にでもご回答頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

対象が画像の場合、画像ファイルを解析してcanvasやVMLで表示することも出来ます。 (1x1ピクセルの<div>を大量に作ったり、テーブルのセルを利用してもいいですが、、、) CやJAVAならlibpngやlibjpegなどのライブラリで画像を読むことが出来ますが、 JavaScriptではたぶん自分で作らないと行けないんじゃないかな、と思います。 が、それが出来れば、ブラウザで画像編集ができるようになります。 (現在公開されている画像編集スクリプトは、フィルターやレイヤー(スタイルシート)を使って表示した後、サーバー側で(JavaScriptでどんなレイヤーを表示したか、という情報を元に)編集、保存していると思います サーバーの処理はファイルの保存処理だけになりますから、サーバーの負荷はほとんど無くなるはずです) BMPや、XBMなら比較的簡単につくれると思います。 (XBMはある意味テキストファイルですが、、、) バイナリデータの送受信を行わないのは、それを表示する手段が簡単ではないからだと思います。 画像の表示なら、 <img id="view"> document.getElementById('view').src='mypicture.jpg'; このほうが簡単ですからね。 prototype.jsのサポート状況はわかりませんが、 XMLファイルを受信することが前提になっているライブラリではバイナリデータは取得出来ません。(responseTextを使わないため) こういう特殊な物を作るなら、自分でXMLHttpRequestライブラリを作った方がいいと思います。 すくなくとも画像処理よりははるかに簡単ですから。 http://www.onicos.com/staff/iz/amuse/javascript/expert/ ここのinflate.jsやdeflate.jsを使ってzip圧縮したファイルをJavaScriptで解凍して表示、 ブラウザで編集してzip圧縮して送信、 ということもできるかもしれません。(思っただけ。)

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;296772
t_wada
質問者

お礼

>表示する手段 そうなんですよね。。。 バイナリファイルへリクエストを送信した後、表示方法が無い事に気づき、結局考えてみると普通の方法表示できますからね。 画像の表示は仰る通りですし、ファイルをダウンロードさせたければwindow.openで十分ですし。 一応、prototype.jsはresponseText等も使用できます。 mauraさんのリンク先を見るとバイナリデータの取得方法が載ってましたので、色々遊べるような気がします。 >inflate.jsやdeflate.js JavaScriptでこんな事まで出来るのかと思いました。。。 まぁ、確かにファイルの読み込みと変数と演算子が揃っていれば何でも作れるのは分かりますが。。。 落としてきて色々と遊んでみようと思います。 どうもありがとうございました。

その他の回答 (1)

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

JavaScriptでバイナリファイルの中身にアクセスできた http://d.hatena.ne.jp/k12u/20061216

t_wada
質問者

お礼

ふむふむ、コレを利用すればバイナリデータに情報を保存して、そこからの読み込みに使えそうですね。 ありがとうございました。

関連するQ&A