JavaのPart.writeメソッドの使い方を完全ガイド!初心者でもわかるファイル保存の基本
先生と生徒の会話形式で理解しよう
生徒
「JavaのServletで、アップロードされたファイルをサーバーに保存したいんですけど、どうすればいいですか?」
先生
「その場合は、javax.servlet.http.Partインターフェースのwrite()メソッドを使うことで、簡単にファイルをサーバーの指定パスに保存できますよ。」
生徒
「ファイル名とか保存先って自由に決められるんですか?」
先生
「もちろんです。ファイル名はwrite()の引数に指定できます。それでは使い方を見ていきましょう。」
1. Part.writeメソッドとは
Part.write(String fileName)メソッドは、ServletのPartオブジェクトが持つファイルの中身を、サーバーの指定パスに書き出すメソッドです。通常、ファイルアップロード時に使います。
このメソッドを使えば、ファイル保存処理を自分でOutputStreamなどを使って書かなくても簡単に実現できます。
2. HTMLフォームの準備
ファイルをアップロードするには、HTML側にenctype="multipart/form-data"を付ける必要があります:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile">
<button type="submit">アップロード</button>
</form>
3. ServletでPart.writeを使う方法
JavaのServletでPart.write()メソッドを使う基本的なコードは以下のようになります。
@WebServlet("/upload")
@MultipartConfig(location="/tmp")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part filePart = request.getPart("uploadFile");
String fileName = filePart.getSubmittedFileName();
filePart.write(fileName);
response.getWriter().println("ファイル " + fileName + " を保存しました。");
}
}
この例では、サーバー上の/tmpディレクトリにファイルが保存されます。
4. 保存先の指定と注意点
@MultipartConfigのlocation属性で、保存されるディレクトリを指定できます。
また、ファイル名にはパスを含めることはできません。セキュリティ上の理由で、write()にはファイル名だけを指定する必要があります。
5. 保存後の処理例
保存したファイルのパスをデータベースに登録したり、ログに記録したりすることもできます。
String savePath = "/tmp/" + fileName;
System.out.println("保存済みファイル: " + savePath);
アップロードファイルの情報(名前、サイズ、種類)なども合わせて記録すると便利です。