2016-06-22 20 views
0

Datei-Uploads funktionieren für kleine Dateien (unter der standardmäßigen 2MB Grenze), funktionieren aber nicht für größere Dateien. Ich verwende JSF auf Tomcat 8.0 und habe meine web.xml entsprechend modifiziert, um das Limit zu erhöhen. Ich habe Haltepunkte im Konstruktor von javax.servlet.MultipartConfig gesetzt, damit ich sehen kann, dass er die web.xml-Konfiguration liest. Wenn die Aktion jedoch aufgerufen wird, wird standardmäßig auf den Standardwert von 2 MB zurückgesetzt (speziell in Request.parseParts (...) ist die Konfiguration des Wrappers null und verwendet den Standardwert des Connectors).Large File Upload funktioniert nicht mit JSF + tomcat trotz Einstellung von multipart-config auf unbegrenzte Größe

Web.xml:

<servlet> 
<servlet-name>Faces Servlet</servlet-name> 
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
<multipart-config> 
    <max-file-size>-1</max-file-size> 
    <max-request-size>-1</max-request-size> 
    <file-size-threshold>0</file-size-threshold> 
</multipart-config> 
</servlet> 

home.xhtml

<h:form id="contentFormId" enctype="multipart/form-data"> 
... 
    <h:inputFile style="display:none;" id="fileUpload" value="#{bean.uploadItem}"> 
    </h:inputFile> 
    <h:commandButton id="browse" action="#{bean.fileUploadListener}" value="Add Files" onclick="$('#contentFormId-fileUpload').click()"> 
    </h:commandButton> 
... 
</h:form> 

context.xml

<?xml version="1.0" encoding="utf-8"?> 
<Context allowCasualMultipartParsing="true" 
... 
</Context> 

aktualisiert Nach einer vereinfachten Anwendung zu schaffen, i t scheint, dass die Rewrite-Bibliothek einen anderen Container-Wrapper in der Anfrage verwendet.

Ohne Rewrite: Request.getWrapper() kehrt StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[Faces Servlet]

Mit Rewrite @URLMapping Anmerkung: Request.getWrapper() kehrt StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[default]

So scheint es, dass ich konfigurieren müssen Standard-Containers dieser Anwendung ähnlich, wie konfiguriert Faces ist, oder ein finden Möglichkeit, mit Rewrite an den Faces-Servlet-Container zu delegieren. Bearbeiten der MaxPostSize in Tomcat ist eine Option (ändern Sie die Standardeinstellung), aber nicht eine, die ich nehmen möchte, wenn ich es vermeiden kann.

+0

Sie sollten wahrscheinlich Ihre mehrt Config entfernen, da die Standardwerte sind, was Sie wollen. Siehe https://docs.oracle.com/javaee/7/tutorial/servlets011.htm – Grayson

+0

Nicht mit Tomcat 8.0, wie ich es verstehe. Ohne eine spezifizierte Konfiguration kommt der Standard von der MaxPostSize() des Connectors, die 2MB ist – JSub

+0

Ich machte eine vereinfachte Anwendung, und es zeigte nicht das gleiche Problem, also denke ich, dass ich irgendwo ein Konfigurationsproblem habe. – JSub

Antwort

0

Ich mag diese Lösung nicht, aber sie dient meinem Zweck für jetzt. Es scheint, als sollte es die Einstellungen des FacesServlets übernehmen, da dies das letzte Ziel nach dem Neuschreiben ist.

Meine Lösung war, zu verschieben (oder kopieren), um die Multipart-config auf den Standard Servlet in web.xml Einstellung:

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet> 
<servlet-name>default</servlet-name> 
    <multipart-config> 
    <max-file-size>-1</max-file-size> 
    <max-request-size>-1</max-request-size> 
    <file-size-threshold>0</file-size-threshold> 
    </multipart-config> 
</servlet>