2016-06-22 16 views
0

文件上傳適用於小文件(在默認的2MB限制下),但不適用於較大的文件。我在Tomcat 8.0上使用JSF,並適當修改了我的web.xml以增加限制。我已經在javax.servlet.MultipartConfig的構造函數中放置了斷點,所以我可以看到它讀取了web.xml配置。當動作被調用時,它默認回到2MB的默認值(具體來說在Request.parseParts(...)中,包裝器的配置爲空,所以使用連接器的默認值)。儘管將multipart-config設置爲無限制大小,但大文件上傳不能與JSF + tomcat配合使用

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> 

更新 創建簡化的應用程序後,我t表示重寫庫導致在請求中使用不同的容器包裝。

沒有改寫: Request.getWrapper()回報StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[Faces Servlet]

隨着重寫@URLMapping註釋: Request.getWrapper()回報StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[default]

如此看來,我需要配置該應用程序的方式類似,面臨的是配置的默認容器,或者找一個獲得Rewrite委託給Faces Servlet容器的方法。在Tomcat中編輯maxPostSize是一個選項(更改默認值),但如果我能避免的話,不會選擇其中一個。

+0

你或許應該刪除您多的配置,因爲默認值是你想要什麼。請參閱https://docs.oracle.com/javaee/7/tutorial/servlets011.htm – Grayson

+0

根據我的理解,不適用於Tomcat 8.0。沒有指定的配置,默認來自連接器的MaxPostSize(),這是2MB的 – JSub

+0

我做了一個簡化的應用程序,它沒有顯示相同的問題,所以我認爲我有一個配置問題的地方。 – JSub

回答

0

我不喜歡這個解決方案,但它現在用於我的目的。它似乎應該默認爲FacesServlet的設置,因爲這是重寫後的最終目標。

我的解決方案是移動(或複製)的多部分配置在web.xml中設置爲默認servlet:

<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> 
相關問題