Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)
准备文件,这里我放在resource下的templates路径
在pom中配置构建打包的资源,更新maven
如果使用了assembly打包插件这样配置可能仍不生效,检查并配置 package.xml文件
编写下载接口,返回要下载的模版文件,fileName可以根据需要灵活配置
@GetMapping("/download")@ApiOperation(value = "下载导入模版", notes = "")public void download(HttpServletResponse response) throws IOException {String fileName = "数据项集导入模板.xlsx";//获得待下载文件的绝对路径String realPath = ResourceUtils.getURL("classpath:").getPath() + "templates";//获取文件输入流FileInputStream fileInputStream = new FileInputStream(new File(realPath, fileName));//文件名包含中文时需要进行中文编码,否则会出现乱码问题response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));ServletOutputStream servletOutputStream = response.getOutputStream();int len = 0;//设置一个缓冲区,大小取决于文件内容的大小byte[] buffer = new byte[1024];//每次读入缓冲区的数据,直到缓冲区无数据while ((len = fileInputStream.read(buffer)) != -1) {//输出缓冲区的数据servletOutputStream.write(buffer, 0, len);}servletOutputStream.close();fileInputStream.close();}
这样做完后,使用swagger测试接口大概率会出现"%A8%A1%E6%9D%BF.xlsx"这种格式,这是由于Swagger对文件名进行了URL编码,导致文件名在下载时显示为编码后的形式。
直接使用浏览器进行Get测试接口,文件编码正常,完美!