文件上傳適用於小文件(在默認的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是一個選項(更改默認值),但如果我能避免的話,不會選擇其中一個。
你或許應該刪除您多的配置,因爲默認值是你想要什麼。請參閱https://docs.oracle.com/javaee/7/tutorial/servlets011.htm – Grayson
根據我的理解,不適用於Tomcat 8.0。沒有指定的配置,默認來自連接器的MaxPostSize(),這是2MB的 – JSub
我做了一個簡化的應用程序,它沒有顯示相同的問題,所以我認爲我有一個配置問題的地方。 – JSub