Domanda

Ho un servlet che viene utilizzato per molte azioni diverse, utilizzato in Modello del controller anteriore.Qualcuno sa se è possibile sapere se i dati restituiti sono enctype="multipart/form-data"?Non posso leggere i parametri della richiesta finché non lo decido, quindi non posso inviare la richiesta al controller appropriato.

Qualche idea?

È stato utile?

Soluzione

Sì, il Content-type l'intestazione nella richiesta dell'agente utente dovrebbe includere multipart/form-data come descritto (almeno) nelle specifiche HTML4:

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

Altri suggerimenti

Se intendi provare a utilizzare il metodo request.getContentType() presentato sopra, tieni presente che:

  1. request.getContentType() può restituire null.
  2. request.getContentType() potrebbe non esserlo pari a "multipart/form-data", ma potrebbe iniziare semplicemente con esso.

Tenendo presente questo, il controllo da eseguire è:

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

Puoi chiamare un metodo per ottenere il tipo di contenuto.

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

Secondo http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, il tipo di contenuto sarà "multipart/form-data".

Non dimenticare che:

  1. request.getContentType() può restituire null.

  2. request.getContentType() potrebbe non essere uguale a "multipart/form-data", ma potrebbe semplicemente iniziare con esso.

Quindi, tenendo presente tutto questo:

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

ServletFileUpload implementa isMultipartContent().Forse puoi aumentare questa implementazione (invece di passare attraverso il sovraccarico per creare un ServletFileUpload) per le tue esigenze.

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

Dovrai leggere i parametri della richiesta per determinarlo, almeno su Alcuni livello.La classe ServletRequest ha un metodo getContentType che ti consigliamo di esaminare.

Per espandere la risposta di awm129 - L'implementazione di Apache Commons corrisponde a questa:

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

Puoi scriverlo molto più breve 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.Collection getParts()

Getta:ServletException - se questa richiesta non è di tipo multipart/form-data

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top