【发布时间】:2014-07-29 13:02:16
【问题描述】:
我有一个 JSP 文件,它创建一个 CSV 文件。
为了告诉服务器该文件是 CSV 文件,我在 JSP 中添加了以下代码:
response.setContentType ("application/csv");
response.setHeader("Content-Disposition", "attachment;filename=test.csv");
在文件中,我只是用“Writer”对象(输出变量)写入文件的内容。 因此我使用以下代码生成文件:
out.write("test1;test2;etc");
这个 csv 文件大约有 16 列,大约 3000 行。
我遇到的问题是“下载文件”对话框没有出现更大的文件。当我只有 128 行时,它可以工作,并且浏览器确实显示“下载文件”-windows。当我有 129 行时,浏览器只需用纯文本打开文件(IE 忽略换行符)。这发生在我测试的每个浏览器(IE 11 和 Firefox)中。我实际上不知道为什么会发生这种情况,尽管我的猜测是它与 Writer-Object 有关。我已经尝试过“flush()” Writer,但这并没有改变任何东西。
提前致谢!
编辑: 我确实将代码简化为以下内容。当 j 限制为 50 时,它确实有效。随着被设置为100,它没有。 .jsp 使用 href.location 或 window.open() 打开(似乎没有区别)
<%
int j = 0;
int k = 0;
for (j = 0; j < 100; j++)
{
out.write(";");
for (k = 0; k < 16; k++)
{
out.write(j + "TEST");
if (k != 15)
{
out.write(";");
}
}
out.write("\r\n");
}
response.setContentType ("application/csv");
response.setHeader("Content-Disposition", "attachment;filename=test.csv");
%>
【问题讨论】:
-
有什么错误吗?你检查过堆栈跟踪吗?
-
Tomcat 不返回任何错误。老实说,我什至不确定这是 Tomcat/Java 还是浏览器的问题。
-
如何尝试
response.setContentLength(<file-size>)? -
是的,我试过了。它没有改变任何东西。
-
是否有文件的最大大小或帽子之类的东西?我确实尝试将 Content Length 设置为非常大的大小,这比实际创建的内容要大得多。