【发布时间】:2017-08-09 14:40:27
【问题描述】:
我有一个负责下载 excel 的控制器方法:
@RequestMapping(value = "/report/user", method = RequestMethod.GET)
public void getUserReport(@RequestParam(value = "name", required = false) String user,
@RequestParam(value = "startdate", required = false) String startDate,
@RequestParam(value = "enddate", required = false) String endDate,
HttpServletResponse response) {
List<Survey> userSurveys = surveyService.findUserSurveys(user, startDate, endDate);
String userFileName = nameService.getUserFileName(user, startDate, endDate);
Workbook userExcelReport = excelReportGenerator.createUserExcelReport(userSurveys);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + userFileName + ".xlsx");
try {
userExcelReport.write(response.getOutputStream());
} catch (IOException e) {
logger.error("The excel workbook could not write to the outputStream ", e);
}
}
如您所见,此控制器映射正在处理 excel 工作簿(在 apache poi 中完成)并设置标题和内容类型,在 google chrome 中这非常有效,但在 firefox 中,文件被下载为没有扩展名的“文件” (但是数据是正确的,就好像我用excel打开文件一样)并且名称构建错误,因为在chrome中这完全正常我认为在firefox中响应的工作方式有问题,任何人都知道什么我做错了吗?
【问题讨论】:
-
根据RFC 6266
filenamevalue是token或quoted-string。所以试试response.setHeader("Content-Disposition", "attachment; filename=\"" + userFileName + ".xlsx\""); -
@AxelRichter 这成功了,愿意发帖作为答案让我接受吗?
标签: java google-chrome firefox download