Question

J'ai un servlet utilisé pour de nombreuses actions différentes, utilisé dans le modèle de contrôleur frontal. . Est-ce que quelqu'un sait s'il est possible de dire si les données postées sont enctype = " multipart / form-data "? Je ne peux pas lire les paramètres de la demande tant que je n’ai pas décidé cela. Je ne peux donc pas envoyer la demande au bon contrôleur.

Des idées?

Était-ce utile?

La solution

Oui, l'en-tête Content-type de la demande de l'agent d'utilisateur doit inclure multipart / form-data comme décrit dans (au moins) la spécification HTML4:

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

Autres conseils

Si vous envisagez d'utiliser la méthode request.getContentType () présentée ci-dessus, n'oubliez pas que:

  1. request.getContentType () peut renvoyer null.
  2. request.getContentType () peut ne pas être égal à à "multipart / form-data", mais peut simplement commencer par.

Dans cet esprit, la vérification à effectuer est la suivante:

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

Vous pouvez appeler une méthode pour obtenir le type de contenu.

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

Selon http: //www.w3 .org / TR / html401 / interact / forms.html # h-17.13.4.2 , le type de contenu sera "multipart / form-data".

N'oubliez pas que:

  1. request.getContentType () peut renvoyer null.

  2. request.getContentType () peut ne pas être égal à "multipart / form-data", mais peut simplement commencer par.

Alors, avec tout cela en tête:

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

ServletFileUpload implémente isMultipartContent (). Peut-être que vous pouvez lever cette implémentation (au lieu de passer par la surcharge pour créer un ServletFileUpload) à vos besoins.

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

Vous devrez lire les paramètres de la requête pour pouvoir le déterminer, au moins à certains niveaux. La classe ServletRequest a une méthode getContentType que vous voudrez examiner.

Pour en savoir plus sur la réponse de awm129 - la mise en œuvre d'Apache commons correspond à ceci:

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

Vous pouvez l'écrire beaucoup plus rapidement en utilisant 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.Collection getParts ()

Lance: ServletException - si cette requête n'est pas de type multipart / form-data

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top