2

我需要提供一个功能,用户可以在我的 Web 应用程序中下载 excel/csv 格式的报告。一旦我在 Web 应用程序中创建了一个创建 excel 的模块,然后读取它并发送到浏览器。它工作正常。这次我不想生成 excel 文件,因为我对文件系统没有那种级别的控制。我想一种方法是在 StringBuffer 中生成适当的代码并设置正确的内容类型(我不确定这种方法)。其他团队也有这个功能,但是当数据非常大时他们会很挣扎。考虑到数据的大小,提供此功能的最佳方式可能非常庞大。是否可以在没有客户端通知的情况下以块的形式发送数据(下载延迟除外)。我忘记补充的一个问题是当有非常大的数据时,它还会在服务器端产生问题(cpu 利用率和内存消耗)。我是否有可能读取固定数量的记录,例如 500 条,将其发送给客户端,然后再读取 500 条直到完成。

4

2 回答 2

2

您还可以生成 HTML 而不是 CSV,但仍将内容类型设置为 Excel。这对于着色和样式文本非常有用。

当客户端接受该压缩时,您也可以使用 gzip 压缩。通常有标准的方法,比如 servlet 过滤器。

绝不是 StringBuffer 或更好的 StringBuilder。最好把它流出来。如果您不(不能)调用 setContentength,则输出会分块(没有预测进度)。

于 2012-04-16T21:35:12.153 回答
0
URL url = new URL("http://localhost:8080/Works/images/address.csv");  

                response.setHeader("Content-Type", "text/csv");  
                response.setHeader("Content-disposition", "attachment;filename=myFile.csv");

                URLConnection connection = url.openConnection();
                InputStream stream = connection.getInputStream();

                BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
                int len;
                    byte[] buf = new byte[1024];
                    while ((len = stream.read(buf)) > 0) {
                      outs.write(buf, 0, len);
                    }
                    outs.close();
于 2012-05-28T09:13:23.540 回答