How to capture parameter in form with enctype="Multipart/form-data"?

Asked

Viewed 1,810 times

2

I’m having trouble capturing the parameters of an HTML form with enctype="Multipart/form-data", I can upload an image through the form, but I can’t capture text typed in the form.

The form looks like this:

<form method="post" action="UploadServlet" enctype="multipart/form-data">
    Select file to upload: <input type="file" name="file" size="60" /><br />        
    Enter text: <input type="name" name="teste"/><br />        
    <br /> <input type="submit" value="Upload" />
</form>

My Servlet to capture the data sent by POST is like this:

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
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("/UploadServlet")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
                 maxFileSize=1024*1024*10,      // 10MB
                 maxRequestSize=1024*1024*50)   // 50MB
public class UploadServlet extends HttpServlet {

    /**
     * Name of the directory where uploaded files will be saved, relative to
     * the web application directory.
     */
    private static final String SAVE_DIR = "uploadFiles";

    /**
     * handles file upload
     */
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // gets absolute path of the web application
    String appPath = request.getServletContext().getRealPath("");
    // constructs path of the directory to save uploaded file
    String savePath = appPath + File.separator + SAVE_DIR;        

    //Capturar campo teste do formulário
    String teste = request.getParameter("teste");
    System.out.println("Parametro capturado: " + teste);

    // creates the save directory if it does not exists
    File fileSaveDir = new File(savePath);
    if (!fileSaveDir.exists()) {
        fileSaveDir.mkdir();
    }

    for (Part part : request.getParts()) {
        String fileName = extractFileName(part);
        part.write(fileName);
    }

    request.setAttribute("message", "Upload has been done successfully!");
    getServletContext().getRequestDispatcher("/message.jsp").forward(
            request, response);
}

/**
 * Extracts file name from HTTP header content-disposition
 */
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("=") + 2, s.length()-1);
        }
    }
    return "";
  }
}

When the attribute enctype="Multipart/form-data" is in the form I cannot capture text, because the request.getParameter() always returns a null value. I use Glassfish server 4.1, and I am starting my studies in back-end. Already, I graduate the help of all.

1 answer

1


Problem solved, I found the solution in the Oracle documentation:

The fileupload Example Application

If someone comes across this same problem, here is recorded the solution that worked in my project.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.