- PR -

ImageIOを使用せずにURLから画像ストリームの取得

1
投稿者投稿内容
@あまぎ
会議室デビュー日: 2006/08/25
投稿数: 11
投稿日時: 2006-09-05 16:55
質問させていただきます。

環境:Linux、j2sdk1.4.2_10、jakarta-tomcat-5.0.28
※2サーバでクラスタリング

上記の環境で、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33161&forum=12&0
にあるJSPコードだと
java.util.NoSuchElementException
at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:804)
at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:814)
のエラーが発生します。

原因はクラスタリングの設定のようなのですが、どうにもわかりません。
私自身がその環境に触れる権限がない(要は別の人の管理下にあるということです)
ので詳細設定もわからない状態です。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33352&forum=12&0
で質問させていただき、回答も頂いたのですがワンタイムURLのロジックの実現が困難な状況です。

そこで、やはり最初に立ち戻り、ImageIOでエラーが出るのならばそれ以外のAPIを使用して、
JSPで表示させようと思ったのですが、検索しても出てくるのはImageIOのサンプルばかりでそれ以外を利用したものがなかなか見つかりません。

何かアドバイス等ございましたら宜しくお願い致します。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2006-09-05 17:30
とりあえず、なぜワンタイムURLなんて方法が必要か?とかまでは理解しているんですよね?
(でないと、ちょっと不安・・・)

やった事無いのですが、dataスキームでデータそのものを埋め込んでしまえば一応解決出きるのでは無いでしょうか?

(ただし、今の所IEでは表示出来なさそうですね。Firefoxで表示出来たのは見た事あるのですが。)
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-09-05 17:40
どうも誤解されているのではないでしょうか。

問題はふたつだと解釈しています。
1. 特定環境下でImageIOでgifのイメージを読み込めない
2. 作成したgifイメージをどのように表示するか?

1.に関しては認識は問題ないと思いますが、
2.に関して認識に誤りがありそうなのです。

jsp(別にServletでもかまいませんが)でイメージを表示する、
の意味ですが、HTTPのリクエストに対し、
画像データをレスポンスとして返すということです。
これをHTML中に組み込むということは(通常の方法であれば)
<img src="画像へのURL">
ということになります。

あるURLへのアクセスに対し、画像を返すように作ったら、
あとはそのURLをsrcに設定するわけです。
なので、イメージを作る手段がなんであれ、どうレスポンスするかという
2.の部分は避けては通れないはずなのですが、大丈夫でしょうか?
@あまぎ
会議室デビュー日: 2006/08/25
投稿数: 11
投稿日時: 2006-09-05 18:37
冬寂さん、nagiseさんご返答ありがとうございます。

実現できました。
以下JSPコードです。
コード:

     response.setContentType("image/gif");
     ServletOutputStream sout = response.getOutputStream();

InputStream in = null;

in = new BufferedInputStream(画像URL.openStream());

int b;
while ((b = in.read()) != -1) {
sout.write(b);
}

sout.close();

response.setHeader("Expires", "0");
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");



これで表示することができました。
考えすぎてたようです。。。

To.冬寂さん
私がnagiseさんとのやりとりでセキュリティうんぬんの話をしたので
教えてくださったんだと思っています。
ワンタイムURL自体は検索したらいろいろ出てきましたのでそれを見て、
理解したつもりです。
dataスキームですが、仕様にIEが標準となっているので残念ながら利用できないです。
情報ありがとうございます。

To.nagiseさん
問題にしていましたimgタグなのですが、以下手順で回避しました。
1.画像専用のjspを作成してそこに上記コードを書く。
2.imgタグにはそのjspを指定する。
こうすることによってURLの露出を防いでいます。

nagiseさん、冬寂さん回答ありがとうございました。

[ メッセージ編集済み 編集者: @あまぎ 編集日時 2006-09-05 18:41 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-09-05 18:59
read(byte[])で作りたい…というのはともかく。
inもcloseしましょう…というかcloseはfinallyで。
1

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