※ ChatGPTを利用し、要約された質問です(原文:ImageIO.write()の保存先について)
ImageIO.write()の保存先について
このQ&Aのポイント
HTMLからfileのデータを受け取り、指定のフォルダに保存する方法についてわかりません。
絶対パスを指定すると、Eclipseの作業フォルダから見える所に保存されますが、Web上のアップ時に問題が発生します。
「getServletContext().getRealPath」を使用しても、指定したディレクトリと異なる場所に保存されます。
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(part.getInputStream());
///////↓↓うまくいきません。(java.io.FileNotFoundException))
//ImageIO.write(img, "jpg", new FileOutputStream("/WEB-INF/data/test.jpg"));
//ImageIO.write(img, "jpg", new FileOutputStream("../../WebContent/WEB-INF/data/test2.jpg"));
///////↓↓絶対パスを直接指定しても保存される(Eclipseの作業フォルダから見える)
// ImageIO.write(img, "jpg", new FileOutputStream("C:/Users/Yuji/workspace/jsp_servlet2/WebContent/WEB-INF/data/test.jpg"));
///////↓↓「getServletContext().getRealPath」を使うと以下のディレクトリに保存される
////(C:\Users\Admin\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\jsp_servlet2\WEB-INF\data\test.jpg)
// ImageIO.write(img, "jpg", new FileOutputStream(getServletContext().getRealPath("/WEB-INF/data/test.jpg")));
} catch (IOException e) {
e.printStackTrace();
}
}//end doPost
HTMLからfileのデータを受け取りテストとして特定のフォルダ(ここでは/WEB-INF/dataの中)に保存したいのですが上手くいきません。
上記のソースにもコメントとして書いていますが
直接絶対パスを指定するとEclipseの作業ファルダから見える所に(意図した所)保存されますが
この場合だとWeb上のアップした時に困ります・・・。
また、「getServletContext().getRealPath」を使うと同じ「/WEB-INF/data/」の中でも想定しているものとは全く違うディレクトリに保存されました。
出来ればサーブレット?から相対パスを指定してEclipseのプロジェクト内のファルダに保存したいと考えているのですがうまくいきません。
上記のソースを記述しているサーブレトから /WEB-INF/data/ への相対パスも含め色々指定してみましたが出来ませんでした。
(../../WebContent/WEB-INF/data/test.jpgや/WebContent/WEB-INF/data/test.jpgや/WEB-INF/data/test.jpg等)
ちなみにプロジェクトフォルダからサーブレットへのパスは以下の通りです。
「/jsp_servlet2/src/websitePrototype1/FileUpServlet」
どうすれば解決するのでしょうか?
お礼
Eclipseからでは無い方法でサーバを起動して確認した所 意図通りの場所に画像が保管されていました。 ありがとうございました。