Pregunta

Tengo un servlet que se utiliza para muchas acciones diferentes, utilizados en la Controlador frontal patrón.¿Alguien sabe si es posible decir si los datos se envían de regreso a es enctype="multipart/form-data"?Yo no puedo leer los parámetros de la petición hasta que me decida esto, así que no puedo enviar la solicitud para el controlador adecuado.

Alguna idea?

¿Fue útil?

Solución

Sí, la Content-type encabezado en el agente de usuario de la solicitud debe incluir multipart/form-data como se describe en (al menos) el HTML4 de especificaciones:

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

Otros consejos

Si usted va a tratar el uso de la solicitud.getContentType() método presentado anteriormente, ser conscientes de que:

  1. solicitud.getContentType() puede devolver null.
  2. solicitud.getContentType() no puede ser igual a "multipart/form-data", pero sólo puede comenzar con ella.

Con esto en mente, el cheque debe ejecutar es :

if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}

Usted puede llamar a un método para obtener el tipo de contenido.

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()

De acuerdo a http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, el tipo de contenido será "multipart/form-data".

No olvides que:

  1. solicitud.getContentType() puede devolver null.

  2. solicitud.getContentType() no puede ser igual a "multipart/form-data", pero sólo puede comenzar con ella.

Así que, con todo esto en mente:

if (request.getContentType() != null && 
    request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) 
{
    << code block >>
} 

ServletFileUpload implementa isMultipartContent().Tal vez usted puede levantar esta aplicación (en contraposición a ir a través de la sobrecarga para crear un ServletFileUpload) para sus necesidades.

http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.html

Usted tendrá que leer los parámetros de la petición en orden a determinar esto, al menos en algunos nivel.El ServletRequest clase tiene un getContentType método que usted querrá mirar.

Para ampliar awm129 la respuesta - Apache commons aplicación corresponde a este:

if (request != null 
        && request.getContentType() != null 
        && request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
    ...
}

Se puede escribir mucho más corto usando Apache commons" org.apache.commons.lang3.StringUtils:

if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) { 
    ... 
}

https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts()

java.util.Colección getParts()

Lanza:ServletException - si esta petición no es de tipo multipart/form-data

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top