Puede un servlet determinar si los datos enviados es multipart/form-data?
-
09-06-2019 - |
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?
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:
- solicitud.getContentType() puede devolver null.
- 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:
solicitud.getContentType() puede devolver null.
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