我需要提供一个功能,用户可以在我的Web应用程序中以excel / csv格式下载报告。一旦我在Web应用程序中创建了一个创建excel的模块,然后将其读取并发送到浏览器。它运作正常。这次我不想生成excel文件,因为我没有对文件系统的那种控制级别。我想一种方法是在StringBuffer中生成适当的代码并设置正确的contenttype(我不确定这种方法)。其他团队也有这个功能,但是当数据非常庞大时,他们正在苦苦挣扎。考虑到数据大小,提供此功能的最佳方法是什么?是否可以在没有客户端注意的情况下以块的形式发送数据(下载延迟除外)。 我忘记添加的一个问题是当数据非常大时,它也会在服务器端产生问题(CPU利用率和内存消耗)。是否有可能我读取固定数量的记录,如500,将其发送给客户,然后读取另外500,直到完成。
答案 0 :(得分:2)
您还可以生成HTML而不是CSV,并仍将内容类型设置为Excel。这对于着色和样式文本很有用。
当客户端接受压缩时,您也可以使用gzip压缩。通常有标准方法,如servlet过滤器。
永远不是StringBuffer或更好的StringBuilder。更好地将其流出。如果你不能(不能)调用setContentength,则输出会被分块(没有预测进度)。
答案 1 :(得分: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();