001package edu.pdx.cs.joy.servlets;
002
003import jakarta.servlet.ServletException;
004import jakarta.servlet.http.HttpServlet;
005import jakarta.servlet.http.HttpServletRequest;
006import jakarta.servlet.http.HttpServletResponse;
007import org.apache.commons.fileupload2.core.DiskFileItem;
008import org.apache.commons.fileupload2.core.DiskFileItemFactory;
009import org.apache.commons.fileupload2.core.FileUploadException;
010import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
011
012import java.io.BufferedReader;
013import java.io.IOException;
014import java.io.InputStreamReader;
015import java.io.PrintWriter;
016import java.util.List;
017
018/**
019 * A servlet that demonstrates how to upload a file to a web server.  It uses the Apache Commons
020 * <a href="http://commons.apache.org/fileupload">FileUpload</a> library to read the file from the
021 * HTTP request.
022 *
023 * @since Summer 2008
024 */
025public class FileUploadServlet extends HttpServlet {
026
027  @Override
028  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
029    response.setContentType("text/html");
030    PrintWriter pw = response.getWriter();
031    pw.println("<html>");
032    pw.println("<body>");
033
034    if (JakartaServletFileUpload.isMultipartContent(request)) {
035      DiskFileItemFactory factory = new DiskFileItemFactory.Builder().get();
036      JakartaServletFileUpload<DiskFileItem, DiskFileItemFactory> upload = new JakartaServletFileUpload<>(factory);
037      List<DiskFileItem> items;
038      try {
039        items = upload.parseRequest(request);
040
041      } catch (FileUploadException ex) {
042        throw new ServletException("Could not upload file", ex);
043      }
044
045      for (DiskFileItem item : items) {
046        if (!item.isFormField()) {
047          String fileName = item.getName();
048          String contentType = item.getContentType();
049          pw.println("<h1>You uploaded " + fileName + "</h1>");
050          pw.println("<h2>Content type is " + contentType + "</h2>");
051
052          if (contentType.equals("text/plain")) {
053            pw.println("<pre>");
054
055            BufferedReader br = new BufferedReader(new InputStreamReader(item.getInputStream()));
056            while (br.ready()) {
057              pw.println(br.readLine());
058            }
059
060            pw.println("</pre>");
061          }
062        }
063
064      }
065
066    } else {
067      pw.println("<h1>You did not upload a file?!</h1>");
068    }
069
070    ServletInfoServlet.dump(request, pw);
071
072    pw.println("</body>");
073    pw.println("</html>");
074  }
075}