t: fileInputUpload нулевой источник при загрузке файла - PullRequest
0 голосов
/ 16 ноября 2011

Я использую tomahawk (1.1.11) и Mojarra (2.1.4) для разработки приложения JSF.Когда я загружаю небольшие файлы (КБ), он работает нормально, но когда я загружаю файлы размером около 160 МБ, он отправляет сообщение об ошибке Нулевой источник .

Вот мой код:

    <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 Гб.Любой совет?

ОБНОВЛЕНИЕ

Вот полный след стека

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)

ОБНОВЛЕНИЕ

Iтакже поместит файл 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>

Ответы [ 2 ]

0 голосов
/ 15 марта 2013

Кролик, вы можете извлечь файл FileUploadBase из файла apache commons fileupload, который вы используете

, и установить максимальный размер файла и ограничения размера запроса, если хотите.Это то, что я сделал, чтобы преодолеть ограничения по размеру после поиска любых элементов конфигурации, чтобы настроить ограничение выше Apache File Upload 1.2.1 ограничение 100 МБ, которое он навязывал мне.

вы можете получить src off http://commons.apache.org/proper/commons-fileupload//index.html

просто измените исходный файл, перекомпилируйте и перезапишите существующий файл класса в вашем файле. Jar загрузки

убедитесь, что вы получили исходный zip-файл, который точно соответствует версии загрузки файла, которую вы используете, иначе вы можете столкнуться с проблемами1010 *

0 голосов
/ 17 ноября 2011

Наконец-то!Я нашел причину проблемы, но я не совсем уверен, что происходит, поэтому я хотел бы, чтобы кто-нибудь помог мне с этим.

Во-первых, проблема была с сетью .xml файл.В самом конце у меня было что-то вроде

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

Так что я удаляю его из web.xml и он загружает файл без проблем!Я думаю, сервер был перепутан с этим `filter-mapping и servlet-mapping.Я надеюсь, что кто-то с большим опытом поможет мне (и всем, кто читает этот вопрос) разобраться в этом.

...