无法使用JSF通过浏览器导入大文件(可能与JSF的使用无关)



我目前正在处理一个项目,通过浏览器导入一个CSV文件,然后将该文件中包含的数据传输到数据库中。

我编写的代码适用于小文件,但事实证明该应用程序不适用于大文件(超过200MB)。

import.xhtml:

...
<t:panelGrid columns="2" styleClass="table_layout center" columnClasses="col_label,col_input">
    <t:outputLabel for="importFile" styleClass="required" value="#{messages.import_file}" />
    <t:inputFileUpload id="importFile" value="#{imports.csv}" required="true" />
    <t:panelGroup colspan="2" styleClass="center">
        <t:commandButton action="#{imports.import}" value="#{messages.import_action_import}" disabled="#{imports.state}" reRender="pnl" />
    </t:panelGroup>
</t:panelGrid>
...

ImportBean.java

public String import() throws IOException {
        System.out.println("Entering import()");
            ...
            if (csv != null) {
                fileInputStream = csv.getInputStream();
            }
            final InputStream fileInputStreamF = fileInputStream;
            Runnable r = new Runnable() {
                public void run() {
                    System.out.println("Entering run()");
                    try {
                        System.out.println("Before entering importService.import(InputStream)");
                        importService.import(fileInputStreamF);
                    } catch (MyException e) {
                        ...
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
            };
            System.out.println("Before running Thread");
            Thread thread = new Thread(r);
}

因此,当我试图上传一个小文件时,控制台显示:

Entering import()
Before running Thread
Entering run()
Before entering importService.import(InputStream)

但当我尝试上传一个大文件时,控制台完全不显示任何内容,这意味着(我相信)ImportBean.import()没有被调用。

对于这个项目,我使用Java5、JSF1.1和Tomcat5。我的猜测是,我应该在Tomcat中配置一些东西,但我不确定

有什么想法吗?

EDIT:我试图在Tomcat server.xml中将maxPostSize设置为0,但似乎没有任何作用。我刚刚使用了一个数据包分析器(Wireshark),看起来文件上传了大约一分钟后就停止了。当它停止时,控制台上仍然什么都没有。。。

尝试增加web.xml中的max-file-sizemax-request-size。重新启动tomcat,然后再次部署WAR文件。

如果最大文件大小和最大请求大小不起作用,问题可能是传输时间过长,超过了浏览器超时时间。

我使用struts处理了一个类似的问题,解决这个问题的唯一方法是让客户端在zip文件中传输csv,然后我们解压缩并处理该文件。

我们的导入功能也需要一段时间来处理文件,因此我们必须将用户转发到一个定期检查导入状态的刷新页面。

相关内容

  • 没有找到相关文章

最新更新