Servletでファイルアップロード機能を実装

  • 2019年6月2日
  • 2020年6月16日
  • Java
今回は、Servletを使ったファイルアップロードのサンプルです。
画面からファイルを選択して、指定のディレクトリにファイルをアップロードします。

JSP

<form action="UploadServlet" method="post" enctype="multipart/form-data">
<div><input type="file" name="file"></div>
<div><input type="submit" value="アップロード"></div>
</form>
<div class="msg"><c:if test="${msg != null}"><%=request.getAttribute("msg") %></c:if></div>
UploadServlet

package controller;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;

@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		ServletRequestContext context = new ServletRequestContext(request);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload fileUpload = new ServletFileUpload(factory);

		try {
			String saveDir = "アップロード先のディレクトリパス";
			List items = fileUpload.parseRequest(context);

			for (FileItem item : items) {
				String fileName = item.getName();
				File file = new File(saveDir + "/" + fileName);
				item.write(file);
			}

			request.setAttribute("msg", "ファイルのアップロードに成功しました。");
			RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
			rd.forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

test.txtを選択し、アップロードボタンを押します。

指定のディレクトリにファイルがアップロードされます。