我的代码适用于 IE 和 FF。在 Chrome 中,浏览器会在文件名的开头和结尾附加“-”连字符,从而使其无法识别文件类型。在保存为 csv 时重命名文件使其在单个单元格中的 Excel 中打开,但我想要一个解决方案来在代码端处理它。好像很难。
下面是我的代码:
//fileName = xxxx.csv
response.setContentType("application/download");
response.setHeader("Cache-Control", "public");
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename= \"" + fileName + "\"");
注意:我搜索了很多博客,但没有找到适用于 Chrome 的解决方案。
最佳答案
我看到两件事:
- 在
Content-Disposition
中,filename=
后不应有空格。 - 我从来没有在文件名周围使用引号;我不认为你是故意的。我在 the RFC 中没有看到任何关于使用引号的信息, 所以我会摆脱它们。
我预计您会看到一个连字符,因为 Chrome 正在用连字符替换空格或(更有可能)引号,因为它认为引号对于您操作系统上的文件名是无效字符。
FWIW,我的工作 Content-Disposition
标题看起来像这样:
Content-Disposition: attachment;filename=someFileName.csv
题外话:回复你的陈述:
My code works for IE and FF. In Chrome, the browser appends "-" hypen to the start and end of the file name, thus making it unable to recognize the file type.
浏览器应该(而且大多数情况下确实如此)通过 MIME 类型而不是文件扩展名来识别文件类型。您可能希望将 Content-Type
设置为 text/csv
而不是 application/octet-stream
。 (当然,如果你是在谈论操作系统稍后对文件做了什么,那就是另一回事了。)
关于java - Chrome 将连字符 "-"附加到下载的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530569/