0

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

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

导入.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()没有被调用。

对于这个项目,我使用 Java 5、JSF 1.1 和 Tomcat 5。我的猜测是我应该在 Tomcat 中配置一些东西,但我不确定。

有任何想法吗?

编辑:我试图maxPostSize在 Tomcat server.xml 中设置为 0,但它似乎没有做任何事情。我刚刚使用了数据包分析器(Wireshark),似乎文件正在上传大约一分钟然后停止。当它停止时,控制台上仍然没有任何东西......

4

2 回答 2

0

尝试增加max-file-sizemax-request-sizeweb.xml重启tomcat,再次部署WAR文件。

于 2013-02-21T15:26:56.340 回答
0

如果 max-file-size 和 max-request-size 不起作用,则问题可能是传输时间过长并且超过了浏览器超时。

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

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

于 2013-02-21T16:08:41.117 回答