63 votos

Manera conveniente analizar entrante multipart/form-data parámetros en un Servlet

Es allí cualquier manera conveniente para leer y analizar los datos de la solicitud entrante.

E. g cliente de iniciar la solicitud post

URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
    OutputStream output = connection.getOutputStream();
    writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
    // Send normal param.
    writer.println("--" + boundary);
    writer.println("Content-Disposition: form-data; name=\"param\"");
    writer.println("Content-Type: text/plain; charset=" + charset);
    writer.println();
    writer.println(param);

Yo no soy capaz de conseguir param usando request.getParameter("paramName"). El siguiente código

BufferedReader reader = new BufferedReader(new InputStreamReader(
    request.getInputStream()));
  StringBuilder sb = new StringBuilder();
  for (String line; (line = reader.readLine()) != null;) {
   System.out.println(line);

  }

sin embargo muestra el contenido para mí

-----------------------------29772313742745
Content-Disposition: form-data; name="name"
J.Doe
-----------------------------29772313742745
Content-Disposition: form-data; name="email"
abuse@spamcop.com
-----------------------------29772313742745

¿Cuál es la mejor forma de analizar la solicitud entrante? No quiero escribir mi propio parser, probablemente no es una solución ya.

78voto

BalusC Puntos 498232

multipart/form-data de las solicitudes codificadas son, de hecho, no por defecto, apoyado por el Servlet API antes de la versión 3.0. El Servlet API analiza los parámetros por defecto usando application/x-www-form-urlencoded de la codificación. Cuando se utiliza una codificación diferente, request.getParameter() a las llamadas de todos los de retorno null. Cuando ya estás en Servlet 3.0 (Glassfish 3, Tomcat 7, etc), entonces usted puede utilizar HttpServletRequest#getParts() lugar. También ver este blog para extended ejemplos.

Antes de Servlet 3.0, un de facto estándar para analizar multipart/form-data de solicitudes sería el uso de Apache Commons FileUpload. Sólo lea cuidadosamente su Guía del Usuario y Preguntas más Frecuentes secciones para aprender a usarlo. He publicado una respuesta con un ejemplo de código antes de aquí (que también contiene un ejemplo de la orientación de Servlet 3.0).

16voto

renura Puntos 91

Soluciones:

Solución A:

  1. Descargar http://www.servlets.com/cos/index.html
  2. Invocar getParameters() com.oreilly.servlet.MultipartRequest

Solución B:

  1. Descargar http://jakarta.Apache.org/commons/fileupload/
  2. Invocar readHeaders() en org.apache.commons.fileupload.MultipartStream

Solución C:

  1. Descargar http://users.boone.net/wbrameld/multipartformdata/
  2. Invocar getParameter en com.bigfoot.bugar.servlet.http.MultipartFormData

Solución D:

El Uso De Struts. Struts 1.1 se encarga de esto automáticamente.

Referencia: http://www.jguru.com/faq/view.jsp?EID=1045507

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X