You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Java/Tomcat中HttpServletResponse参数设置Excel下载文件名称

解决方案

你只需要给HttpServletResponse添加Content-Disposition响应头,明确指定下载文件名即可,浏览器会优先读取该头的配置作为下载文件名,不会再默认使用请求路径的最后一段作为文件名。

修改后的完整代码

@RequestMapping(value="/something/somthingelse.do", method=RequestMethod.POST)
public void doSomething(@ModelAttribute ReportModel reportModel, BindingResult bindResult,HttpServletResponse response,Model model) throws Exception{
    Workbook reportObj = ReportService.generateExcel(ReportService.getReportData(reportModel.getReportParameters()));
    response.setContentType("application/vnd.ms-excel");
    // 新增这一行配置下载文件名
    response.setHeader("Content-Disposition", "attachment;filename=myspreadsheet.xls");
    OutputStream out = response.getOutputStream();
    HSSFWorkbook workbook = (HSSFWorkbook) reportObj;
    workbook.write(out);
    out.flush();
    out.close();
}

补充说明

  • 头属性里的attachment表示该响应内容为下载附件,不会直接在浏览器内打开,如果需要浏览器尝试内置打开可以换成inline
  • 如果文件名包含中文,需要先对文件名做UTF-8编码,避免不同浏览器出现乱码,示例如下:
String cnFileName = URLEncoder.encode("销售报表.xls", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + cnFileName);
  • 原有代码中已经直接把Excel内容写入了响应输出流,再返回视图名属于冗余操作,部分场景下会导致响应重复写入报错,因此建议把方法返回值改为void,删除原有的return语句。

内容的提问来源于stack exchange,提问作者user1071914

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:57:02