java - Chrome 和 Firefox 中的 httpServletResponse 行为

标签 java google-chrome firefox download

我有一个负责 Excel 下载的 Controller 方法:

@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);
    }

}

正如你所看到的,这个 Controller 映射正在存储一个 Excel 工作簿(在 apache poi 中完成)并设置标题和内容类型,在 google chrome 中这完美地工作,但在 firefox 中该文件被下载为没有扩展名的"file" (但数据是正确的,就像我用 Excel 打开文件一样),并且名称构建错误,就像在 chrome 中一样,这完全正常,我认为 Firefox 中的响应工作方式有问题,任何人都知道什么我可能做错了吗?

通过 Firefox 下载文件的示例 image with files not working 使用 chrome 下载示例 enter image description here

最佳答案

根据RFC 6266文件名 token 引用字符串

token 不得包含分隔符。但空格是一个分隔符。因此您必须使用带引号的字符串

所以尝试一下

response.setHeader("Content-Disposition", "attachment; filename=\"" + userFileName + ".xlsx\"");

关于java - Chrome 和 Firefox 中的 httpServletResponse 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867690/

相关文章:

java - 从 DropBox 下载文件到本地机器

javascript - activeElement 总是返回 document.body

google-chrome - Google Chrome Custom.css webkit-scrollbar 不再有效

html - 网络音频在 Chrome 中播放,但在 Firefox 中不播放

html - 粘性页脚中的链接在 Firefox 和 Chrome 中不可点击

java - spring integration中如何并行同步处理?

java - Selenium WebDriver - 意外的模态对话框警报

java - Args 保证非空?

google-chrome - karma :从WSL使用Windows的Chrome

javascript - Firefox 插件并不总是获取视频源