• 締切済み

DWRでのバイナリデータ(画像)の表示

DBでBlob型として扱っている画像データをDWRを用いて非同期にクライアント側で表示させたいと思っております。 しかし、方法がわからず、そもそもできるのかどうかもわかりません。 下記のリンク先サイトではoverrideMimeTypeを用いてFirefoxに限り画像データのjavascriptでの取り扱いに成功しています。 http://zombiebook.seesaa.net/article/34873787.html できればDWRを用いてクロスブラウザの問題を解決しながら(せめてIEでも)Blob型のデータを表示させたいと思っています。 ご説明不足の点、根本的な勘違いなどあるかも知れませんが、よろしくご回答お願いいたします。 【環境】 DWR 2.0.5 JDK 1.5.0

みんなの回答

回答No.2

IEのActiveXObjectではバイナリデータを扱えますが、XMLHttpRequestは、バイナリデータをサポートしていません。 IE以外のブラウザはすべてXMLHttpRequestで通信します。 もちろん、JavaScriptの言語仕様としてバイナリデータを扱えますので、 サーバーでBASE64エンコードしたデータをJavaScriptでバイナリデータにデコードすることでバイナリデータを受信する事は可能ですが、 それを表示する手段がありません。 やってやれなくはないですが、画像データを画像として表示するのは現実的ではないです。 IE7以降、ActiveXモードとXMLHttpRequestモードを切り替えられますので、(添付画像参照) ユーザーがXMLHttpRequestモードにしていると、バイナリデータが破壊される可能性があります。 画像を表示するだけなら、わざわざAjaxを使う必要はないと思います。 <script> onload=function(){ var img=new Image(); img.src='http://example.com/image.jsp?id=5'; document.getElementById('output').appendChild(img); } </script> <div id="output"></div>

jima-piku
質問者

お礼

丁寧なご説明ありがとうございます。勉強になります。 伝えそびれておりましたが、今回の開発の主目的は、DWRを使う練習でした。 素人なもので、「DWRを使えばクロスブラウザの問題も解決して、透過的にサーバー側のリモートオブジェクトを利用できる。じゃあ画像データはDataBaseの中にBlob型で持たせておいて、適当なbeanでひっぱってくればいけるかな?」と短絡的に考えておりました。 表示の部分にまで考えが及んでいなかったようです。 もう少しDWRについても、それ以外についても勉強が必要だと思います。 とりあえずは、なんとか別なカタチでDWRを使おうと思います。

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

一般的な画像形式への変換はサーバーサイドで行うことにして、 ブラウザ側のJavaScriptではその画像を得られるURLをsrcにしたimg要素を生成するようにするのではだめなの?

jima-piku
質問者

お礼

素早い回答ありがとうございます。 確かに画像形式への変換はサーバーサイドで行うのがよいようですね。 今回の目的はDWRの使用(練習)ですので(目的と手段を履き違えているようですが)、どのようにDWRを使用したらよいか考えたいと思います。 また何か助言いただけると幸いです。 (実は今回わざわざ画像ファイルを一度Blob型に変換してDataBaseにいれてましたorz。最初から画像ファイルのURLだけデータベースで管理すればよかった気もします。)

関連するQ&A