每当遇到文件下载时,总是想不起来需要给 Response 设置哪些 Header,这次干脆记录下来,方便以后查询:
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("application/octet-stream");
其中:
- fileName 最好使用 UTF-8 编码
- content type 的值,可能需要根据下载的文档类型不一样,需要进行相应修改
另外,当下载的是 CSV 文件时,为了避免下载好的文件在用 excel 打开时发生乱码问题,请一定要设置 BOM。具体的,请参考我的另一篇博客:防止CSV打开乱码
ps:网上看到还有以下两个处理:
response.reset();
在设置所有 Header之前调用这个 reset()。
不过,我自己在实践时,发现不调用此方法也并未发生什么意外。
当然,如果有意外发生时,可以尝试一下加上这个处理。response.addHeader(“Content-Length”, “” + file.length());
这个一看就知道是设置下载的文件的内容长度的。
不过,我建议大家还是要不设置的好。以免设置错了,导致下载的文件是个残缺的文件。
因为我自己就出现过,在使用fileContent.length()
作为Content-Length的值时,发现下载的 CSV 文件总是被截取掉一小部分。
参考文档