2011-11-16 61 views
0

我使用tomahawk(1.1.11)和Mojarra(2.1.4)開發JSF應用程序。當我上傳小文件(kb)時,它工作正常,但當我上傳大約160Mb的文件時,它會發送一個錯誤空源t:fileInputUpload上傳文件時爲空源

這裏是我到目前爲止的代碼:

<h:form id="menuForm" enctype="multipart/form-data"> 
     <h:outputLabel for="option" value="Acciones disponibles: " /> 
     <h:selectOneMenu id="option" 
         value="#{uploadFile.option}"> 
      <f:selectItem itemLabel="Seleccione una opción..." itemValue="null" /> 
      <f:selectItems value="#{uploadFile.options}" /> 
      <f:ajax render="@form" execute="@form" /> 
     </h:selectOneMenu> 

     <h:panelGrid id="dataLoad" columns ="3" 
        rendered="#{uploadFile.option == 'Agregar información (sin validación).' || 
           uploadFile.option == 'Cargar información completa (con validación).' || 
           uploadFile.option == 'Cargar solo información errónea (con validación).'}"> 
      <h:outputLabel for="upfile" value="Archivo: " /> 
      <t:inputFileUpload id="upfile" 
           value="#{uploadFile.upFile}" /> 
      <h:panelGroup/> 
      <h:panelGroup/> 
      <h:commandButton value="Continuar" 
          onclick="return confirmation()" 
          action="#{uploadFile.upload}" /> 
     </h:panelGrid> 

     <h:panelGrid id="dataValidate" columns="3" 
        rendered="#{uploadFile.option == 'Validar información actual.'}"> 
      <h:commandButton value=" Validar " action="#{uploadFile.validate()}"/> 
     </h:panelGrid> 

     <h:panelGrid id="listFiles" columns="3" 
        rendered="#{uploadFile.option == 'Visualizar todos los archivos.'}"> 
      <t:tree2 id="tree" value="#{listFiles.treeRoot}" 
        var="node" varNodeToggler="t" 
        clientSideToggle="false"> 
       <f:facet name="folder"> 
        <h:panelGroup> 
         <t:graphicImage value="images/folderOpen.png" 
             rendered="#{t.nodeExpanded}" 
             border="0" /> 
         <t:graphicImage value="images/folderClose.png" 
             rendered="#{!t.nodeExpanded}" 
             border="0" /> 
         <h:outputText value="#{node.description}" 
             styleClass="nodeFolder" /> 
        </h:panelGroup> 
       </f:facet> 
       <f:facet name="file"> 
        <h:panelGroup> 
         <h:commandLink immediate="true" 
             action="#{listFiles.download(node.identifier)}"> 
          <t:graphicImage value="images/file.png" border="0" /> 
          <h:outputText value="#{node.description}" /> 
         </h:commandLink> 
        </h:panelGroup> 
       </f:facet> 
      </t:tree2> 
     </h:panelGrid> 
    </h:form> 

,實際上我需要上傳比更大的文件,甚至高達2 GB。有任何建議嗎?

UPDATE

下面是完整的堆棧跟蹤

java.lang.IllegalArgumentException: null source 
at java.util.EventObject.<init>(Unknown Source) 
at javax.faces.event.SystemEvent.<init>(SystemEvent.java:71) 
at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:73) 
at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:73) 
at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:271) 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:257) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:269) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

UPDATE

我也會把web.xml文件,也許我錯過了一些配置。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <context-param> 
     <param-name>org.apache.myfaces.CHECK_EXTENSIONS_FILTER</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <filter> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> 

     <init-param> 
      <param-name>uploadMaxFileSize</param-name> 
      <param-value>5g</param-value> 
     </init-param> 
     <init-param> 
      <param-name>uploadThresholdSize</param-name> 
      <param-value>500m</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <servlet-name>/faces/*</servlet-name> 
    </filter-mapping> 
</web-app> 
+0

請在您的問題中包含完整的堆棧跟蹤。 – BalusC

+0

我也添加了web.xml配置,也許我錯過了tomahawk的一些配置。 – BRabbit27

回答

0

終於!我發現問題的原因,但我不確定發生了什麼,所以我想如果有人能幫助我解決這個問題。

首先,問題是web.xml文件。在最後我有這樣的事情

<filter-mapping> 
    <filter-name>MyFacesExtensionsFilter</filter-name> 
    <servlet-name>/faces/*</servlet-name> 
</filter-mapping> 

所以我從web.xml中刪除,並把它上傳該文件沒有任何問題!我認爲,服務器與`filter-mappingservlet-mapping混淆。我希望有更多經驗的人幫助我(和所有閱讀這個問題的人)清楚這件事。

+0

另一方面,我能夠以Mb的順序上傳文件,但我需要上傳約3.86 Gb的文件。我嘗試上傳大文件,但它不發送任何錯誤/異常。 – BRabbit27

+1

''應該指向'FacesServlet'的'',不代表URL模式。你已經有了正確的,所以確實刪除了錯誤的條目。 – BalusC

0

兔子,你可以撕裂了Apache的通用FileUpload JAR您正在使用

的FileUploadBase文件,並設置最大文件和請求大小限制,如果你的願望。這是我在搜索任何配置項目以克服大小限制後,自定義apaches上的限制文件上載1.2.1 100mb的限制,它強加給我。

你可以得到SRC關閉http://commons.apache.org/proper/commons-fileupload//index.html

只需修改源文件編譯和覆蓋現有在你的類文件的FileUpload罐子

確保你得到的是完全對應於文件的版本的源壓縮上傳你否則您可能會遇到問題

相關問題