プロが教えるわが家の防犯対策術!

クライアントからファイル名をサーブレットに渡し、
そのファイルをImageIOでクライアントに返して表示させるプログラムを組んでいます。

そこで、クライアントからパラメータで受け取った文字列(画像ファイル名)を変数に入れ、
サーブレット側で指定してある文字列(ファイル格納ディレクトリへのパス)の最後にその変数を連結させたものから
Fileオブジェクトを作り、ImageIOのreadメソッドの引数として指定したところ
IIOExceptionの例外が発生します。(Can't read input file!)
サーブレット側でファイルへのパスを直接指定したものでFileオブジェクトを作って実行するとうまくいきます。
原因は何なのでしょうか?

String filename = request.getParameter(クライアントから受け取ったファイル名);
ServletContext sc = getServletContext();
String filepath = sc.getRealPath("/img/"+filename);
response.setContentType("image/jpg");
File file = new File(filepath);
BufferedImage readImage = ImageIO.read(file);   ←ここで例外が発生します
ImageIO.write(readImage, "jpg", response.getOutputStream());

開発環境はEclipce,Tomcatです。

A 回答 (1件)

> サーブレット側でファイルへのパスを直接指定したものでFileオ


> ブジェクトを作って実行するとうまくいきます。
あなたが直接指定した文字列と、request.getParameter()で受け取った文字列またはそれを使って合成したパスの文字列が、同じでない、としか言えませんね。そのへんのデバッグは、すでにやっていますか?
    • good
    • 0
この回答へのお礼

ranco様

クライアント側からPrintWriterで文字列を送る時に、println()で書き込みを行っており、
改行コードが入ってしまったせいでファイルのパスが間違いになってしまっていました。
文字列でデバッグした際は目に見えずに何がおかしいのかわかりませんでしたが、
文字列のデータを見た際、一番最後に違うものがついていたので気づきました。
また、この度は返事が大変遅れて申し訳ありませんでした。

お礼日時:2007/12/05 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!