Kann ein Servlet feststellen, ob es sich bei den veröffentlichten Daten um Multipart-/Formulardaten handelt?

StackOverflow https://stackoverflow.com/questions/66423

Frage

Ich habe ein Servlet, das für viele verschiedene Aktionen verwendet wird Front-Controller-Muster.Weiß jemand, ob es möglich ist, festzustellen, ob die zurückgesendeten Daten enctype="multipart/form-data" sind?Ich kann die Anforderungsparameter erst lesen, wenn ich dies entschieden habe, sodass ich die Anforderung nicht an den richtigen Controller senden kann.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ja, der Content-type Header in der Anfrage des User-Agent sollte multipart/form-data umfassen, wie in (mindestens) beschrieben die HTML4 spec:

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

Andere Tipps

Wenn Sie die request.getContentType () -Methode versuchen werden oben dargestellt verwenden, beachten Sie, dass:

  1. request.getContentType () kann null zurück.
  2. request.getContentType () kann nicht sein, gleich auf "multipart / form-data", kann aber nur mit ihm beginnen.

diese mit im Auge, die Prüfung Sie ausführen sollen, ist:

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

Sie können eine Methode aufrufen, den Inhaltstyp zu erhalten.

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

Nach http: //www.w3 .org / TR / html401 / interact / Forms.html # h-17.13.4.2 , wird der Content-Typ "multipart / form-data" sein.

Vergessen Sie nicht, dass:

  1. request.getContentType () kann null zurück.

  2. request.getContentType () nicht gleich "multipart / form-data", kann aber nur mit ihm beginnen.

Also, mit all dies im Sinn:

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

ServletFileUpload implementiert isMultipartContent (). Vielleicht können Sie diese Implementierung heben (im Gegensatz zu durch den Overhead geht eine ServletFileUpload zu schaffen) für Ihre Bedürfnisse.

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

Hier finden Sie die Anforderungsparameter, um zu lesen, um dies zu bestimmen, zumindest auf einig Ebene. Die ServletRequest Klasse hat eine getContentType Methode, die Sie wollen, zu betrachten.

awm129 des zu erweitern - Apache commons' Implementierung entspricht dies:

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

Sie können es org.apache.commons.lang3.StringUtils viel kürzer mit Apache commons schreiben:

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

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

java.util.Collection getParts()

Würfe:ServletException – wenn diese Anfrage nicht vom Typ multipart/form-data ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top