※ ChatGPTを利用し、要約された質問です(原文:サーブレットでの画像処理時のパスの指定)
サーブレットでの画像処理時のパス指定に関する問題
このQ&Aのポイント
サーブレットでの画像処理時にパス指定の方法に問題が発生
クライアントから受け取ったファイルパスを連結させる際にIIOExceptionが発生
直接ファイルパスを指定すると正常に処理されるが、変数を使用すると例外が発生
クライアントからファイル名をサーブレットに渡し、
そのファイルを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です。
お礼
ranco様 クライアント側からPrintWriterで文字列を送る時に、println()で書き込みを行っており、 改行コードが入ってしまったせいでファイルのパスが間違いになってしまっていました。 文字列でデバッグした際は目に見えずに何がおかしいのかわかりませんでしたが、 文字列のデータを見た際、一番最後に違うものがついていたので気づきました。 また、この度は返事が大変遅れて申し訳ありませんでした。