Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

画像の読み込みと保存



下記のソースでHTMLからファイルのデータを読み込み
画像処理の後「C:/Image」のフォルダに保存したいのですが例外が発生しました。

getParts()で読み込んだデータをImageIOに渡す時にキャストしたのですが
これでは駄目なのでしょうか?

後、 ImageIO.write()で書き出す時に特定のディレクトリに
書き出したいのですがどうすればいいのでしょうか?



例外:
org.apache.catalina.core.ApplicationPart cannot be cast to java.io.File

メッセージ org.apache.catalina.core.ApplicationPart cannot be cast to java.io.File
説明 The server encountered an internal error (org.apache.catalina.core.ApplicationPart cannot be cast to java.io.File) that prevented it from fulfilling this request.





「Java」

@WebServlet(name="FileUpServlet", urlPatterns="/FileUpServlet")
@MultipartConfig(location="C:/Images", maxFileSize=5000000, maxRequestSize=5000000, fileSizeThreshold=5000000)
public class FileUpServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");

Part part = request.getPart("file");
BufferedImage img;

try {
img = ImageIO.read((File) part);

/*途中画像処理*/

ImageIO.write(img, "jpeg", new File("testImage.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}//end doPost
}///end class


「HTML」

<form action="/jsp_servlet2/websitePrototype/FileUpServlet" method="post" enctype="multipart/form-data">
<input type="submit" value="ファイルアップロード" />
<input type="file" name="file" />
</form> 

3

回答

95762

閲覧

3件の回答

評価

0

基礎が理解できていないのに、サーブレット、しかもファイ
ルアップロードを扱えるわけがない。
悪いことは言わないから、初歩からやり直そう。

評価

0

PartはFileではないです。part.getInputStream()でストリームを得ることができ、このストリームからアップロードされたファイルの中身を読み出すことができます。

ImageIOのreadメソッドはいくつかのオーバーロードがあって、Fileを引数に取るものの他のにInputStreamを取るものがあります。

Part.getInputStream()でファイルの中身を読み出すことができるストームが得られ、ImageIOにはストリームを渡せるreadメソッドがある。あとは分かりますよね。

ImageIO.writeで特定ディレクトリに出力するのは簡単です。引数に渡すFileがファイル名だけでなく、相対パスや絶対パスを持っていれば、そのパスに出力されます。

評価

0

ありがとうございます。
ImageIO.write()で絶対パスを指定すると画像を保存する事
ができました。

しかし相対パスについてはうまくいきませんでした。

こちらの質問にも答えて頂けないでしょうか?
http://www.javaroad.jp/bbs/answer.jsp?q_id=2012062605534438

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。