0

現在、ブラウザから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()、呼び出されていないことを意味します(私は信じています)。

このプロジェクトでは、Java 5、JSF 1.1、Tomcat 5を使用しています。Tomcatで構成する必要があるものがあると思いますが、よくわかりません。

何か案は?

編集: Tomcat server.xmlで0に設定しようとしましmaxPostSizeたが、何も実行されないようです。パケットアナライザー(Wireshark)を使用したところ、ファイルが約1分間アップロードされ、その後停止したようです。そして、それが停止しても、コンソールにはまだ何もありません...

4

2 に答える 2

0

max-file-sizemax-request-sizeを増やしてみてくださいweb.xml。tomcatを再起動し、WARファイルを再度デプロイします。

于 2013-02-21T15:26:56.340 に答える
0

max-file-size と max-request-size が機能しない場合は、転送に時間がかかりすぎてブラウザのタイムアウトを超えている可能性があります。

私はストラットを使用して同様の問題に取り組みましたが、それを解決する唯一の方法は、クライアントに csv を zip ファイルで転送してもらい、ファイルを解凍して処理することでした。

インポート機能もファイルの処理に時間がかかるため、インポートのステータスを定期的にチェックする更新ページにユーザーを転送する必要がありました。

于 2013-02-21T16:08:41.117 に答える