- PR -

jpgを出力する方法がわかりません。

1
投稿者投稿内容
Noda
常連さん
会議室デビュー日: 2005/06/14
投稿数: 21
投稿日時: 2005-07-06 12:18
現在サーブレットでOracleにアクセスしてBlob型のバイナリデータを取得して、それをjpgファイルに変換し、jspに表示させようとしているのですが、webを見回ってもバイナリファイルのパスを指定してのjpgを返す方法しか載っていません。どうかヒントでもよろしいのでご教授お願いします。

masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-06 12:56
こんにちは。

HTMLはドキュメントの中に<img>タグが存在した場合、src属性で指定された
ファイルをダウンロードしに行くという流れで、画像を表示します。
<img src="hoge.jpg"> ならばhoge.jpgが表示されますね。

ここで指定するsrc属性には、バイナリファイルのパスだけでなく、Servlet
のパスを指定し、動作させることも可能です。
<img src="/servlet/hogeServlet">
従って、hogeServletにjpgファイル変換のロジックを実装し、responseとし
てjpgファイルを返してあげれば、実現可能だと思いますよ。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-07-06 13:06
どもです、がると申します。
一応念のため。
「ヘッダの設定も忘れずにね ^^」
Content-typeをちゃんとimage/jpeg にしてあげましょう。
Noda
常連さん
会議室デビュー日: 2005/06/14
投稿数: 21
投稿日時: 2005-07-06 13:10
>hogeServletにjpgファイル変換のロジックを実装し、responseとし
>てjpgファイルを返してあげれば、実現可能だと思いますよ。

返信ありがとうございます。

masaさんが言われるように、Blob型バイナリデータをjpgに変換してjspに返すというほうほうを実行しようとしているのですが、肝心のjpgに変換するロジックで悩んでいます。
ServletOutputStreamをしようしてできそうなんですが、ServletOutputStreamというものを使ったことがないもので、勝手がわからないので困っています。どなたか教えていただけないでしょうか?
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2005-07-06 13:39
引用:

masaさんが言われるように、Blob型バイナリデータをjpgに変換してjspに返すというほうほうを実行しようとしているのですが、肝心のjpgに変換するロジックで悩んでいます。
ServletOutputStreamをしようしてできそうなんですが、ServletOutputStreamというものを使ったことがないもので、勝手がわからないので困っています。どなたか教えていただけないでしょうか?


こんにちは。
Blob型のバイナリデータはjpgのデータそのものではないのですか?
jpgのデータが格納されているのであれば、そのままバイナリデータをStreamに流し込めば画像を表示できます。

実装方法は、「Servlet ファイル ダウンロード」などで検索すればヒットします。
Noda
常連さん
会議室デビュー日: 2005/06/14
投稿数: 21
投稿日時: 2005-07-06 14:51
バイナリデータをStreamに流し込むということは、

Blob data;
resp.setContentType("image/jpeg");
byte[] buff = new byte[1024];
OutputStream out = null;
InputStream in = null;
try{
  in = data.getBinaryStream();
  out = new FileOutputStream("file.jpg");
  int n;
while(n = in.read(buff) != -1){
out.write(buff,0,n);
}
}catch(IOException e){
}
finally{
try{
if(in != null){
in.close();
}

if(out != null){
out.close();
}
}catch(IOException e){
}
}

という感じにですか?




[ メッセージ編集済み 編集者: Noda 編集日時 2005-07-06 17:17 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-07-06 18:19
引用:

  out = new FileOutputStream("file.jpg");


この部分を、

コード:
out = resp.getOutputStream();


にすれば動きそうですね。
ヘルプミー
会議室デビュー日: 2005/04/21
投稿数: 13
投稿日時: 2005-08-12 12:11
こんにちは。

現在、jpgのダウンロードとは多少関係する問題に遭遇していますので、
このスレに書かせていただきました。

画像ファイルをバイナリ形式で取得する際に、エラーが発生することがあります。
具体的には、上記の in = data.getBinaryStream();  では、

 ・拡張子が「.jpg」であれば、ダウンロードまでうまくいける
 ・拡張子が「.P21」であれば、java.lang.null pointer exception が発生する

走ってるソースはまったく一緒で、なぜこうなるのかわかりません。
何か考えられる原因がありますでしょうか?ご教示していただきたいです。
1

スキルアップ/キャリアアップ(JOB@IT)