java file upload example with servlet 30 api
Here is an example of how to implement file upload in a Java web application using the Servlet 3.0 API:
- Create a form in an HTML or JSP page for the user to select a file to upload:
<form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload" /> </form>Sourceww:w.theitroad.com
- Create a servlet to handle the file upload:
import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; 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 javax.servlet.http.Part; @WebServlet("/upload") public class FileUploadServlet extends HttpServlet { private static final String UPLOAD_DIR = "uploads"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the file part from the request Part filePart = request.getPart("file"); // Get the file name and content type String fileName = filePart.getSubmittedFileName(); String contentType = filePart.getContentType(); // Create the upload directory if it doesn't exist Path uploadDir = Paths.get(getServletContext().getRealPath("") + File.separator + UPLOAD_DIR); if (!Files.exists(uploadDir)) { Files.createDirectory(uploadDir); } // Save the file to the upload directory Path file = uploadDir.resolve(fileName); try (InputStream input = filePart.getInputStream()) { Files.copy(input, file); } response.sendRedirect("success.jsp"); } }
- Configure the servlet in the deployment descriptor (
web.xml
) or using annotations. Here is an example using annotations:
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(urlPatterns = { "/upload" }, initParams = { @WebInitParam(name = "upload-dir", value = "/uploads") }) @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB maxFileSize = 1024 * 1024 * 10, // 10MB maxRequestSize = 1024 * 1024 * 50) // 50MB public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String SAVE_DIR = "uploadFiles"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String appPath = request.getServletContext().getRealPath(""); String savePath = appPath + File.separator + SAVE_DIR; File fileSaveDir = new File(savePath); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } for (Part part : request.getParts()) { String fileName = extractFileName(part); part.write(savePath + File.separator + fileName); } request.setAttribute("message", "Upload has been done successfully!"); getServletContext().getRequestDispatcher("/message.jsp").forward(request, response); } private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String s : items) { if (s.trim().startsWith("filename")) { return s.substring(s.indexOf("=") +