1

我已使用以下代码下载 csv 文件

InputStream is = new ByteArrayInputStream(csv.toString().getBytes());
IOUtils.copy(is, response.getOutputStream());

response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment; filename=mycsvfile.csv");
response.flushBuffer();
is.close();

它适用于数十条记录。我能够下载 *.csv 文件。但它会为数百条记录返回没有文件扩展名的文本/纯文本。

4

1 回答 1

1

在您已经将数据发送到响应流response.setHeader() 之后,您正在调用。如果响应流缓冲区不够大,无法处理所有数据,则必须将标头写出才能写入内容。坦率地说,我很惊讶setHeader没有抛出异常说响应主体已经启动,但无论如何......

只需将标题设置部分移至调用IOUtils.copy.

我还强烈建议在String.getBytes()调用中指定字符编码,并在响应标头中指定相同的编码。(我通常使用 UTF-8。)

于 2013-02-01T10:09:31.813 回答