我目前正在做一个项目,我通过浏览器导入 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),似乎文件正在上传大约一分钟然后停止。当它停止时,控制台上仍然没有任何东西......