2016-06-22 5 views
0

파일 업로드는 작은 파일 (기본 2MB 제한)에서 작동하지만 큰 파일에서는 작동하지 않습니다. Tomcat 8.0에서 JSF를 사용하고 있으며 제한을 늘리기 위해 web.xml을 적절하게 수정했습니다. javax.servlet.MultipartConfig의 생성자에 중단 점을 넣었으므로 web.xml 구성을 읽습니다. 액션이 호출 될 때 기본값으로 2MB가 기본값으로 돌아갑니다 (특히 Request.parseParts (...)에서는 래퍼의 config가 null이므로 커넥터의 기본값을 사용합니다).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> 

업데이트 간단한 프로그램을 작성 후, 다시 쓰기 라이브러리가 요청에서 다른 컨테이너 래퍼를 사용하고있는 것 같습니다. 재 작성없이

: Request.getWrapper() 반환 StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[Faces Servlet] 재 작성 @URLMapping 주석

: Request.getWrapper() 반환 StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestWeb].StandardWrapper[default]

그래서 내가이 구성되어 얼굴 방식과 유사이 응용 프로그램의 기본 컨테이너를 구성, 또는를 찾을 필요가 보인다 Faces Servlet 컨테이너에 위임하도록 Rewrite를 얻는 방법. Tomcat에서 maxPostSize를 편집하는 것은 옵션입니다 (기본값 변경).하지만 피할 수 있다면 취하고 싶지 않습니다.

+0

:

내 솔루션의 web.xml의 기본 서블릿 설정 멀티 - 설정을 이동 (또는 복사)하는 것이었다. https://docs.oracle.com/javaee/7/tutorial/servlets011.htm – Grayson

+0

Tomcat 8.0을 이해함에 따라 그렇지 않습니다. 지정된 구성이 없으면 기본값은 커넥터의 MaxPostSize() (2MB – JSub

+0

)에서 가져온 것입니다. 간단한 응용 프로그램을 만들었지 만 동일한 문제가 나타나지 않아 어딘가에 구성 문제가 있다고 생각합니다. – JSub

답변

0

나는이 솔루션이 마음에 들지 않지만 지금은 내 목적을 달성한다. FacesServlet의 설정이 기본값이되어야하는 것처럼 보입니다. FacesServlet은 다시 작성한 후 최종 대상이기 때문입니다. 기본 값은 당신이 원하는 때문에 당신은 아마 당신의 다중 설정을 제거해야합니다

<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>