前言
文件下载上传本质上是文件的读写,核心是 Java 的流操作。
下载文件简单示例
Controller 层接口
@GetMapping("/downloadFile")
public void downloadTemplate(HttpServletResponse response) {
this.fileService.downloadFile(response);
}
Service 层具体实现
/**
* 下载测试文件
*
* @param response 响应
*/
@Override
public void downloadFile(HttpServletResponse response) {
// 重置 response
response.reset();
response.setContentType("application/octet-stream;charset=utf-8");
try {
// 在响应头设置下载文件名
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("质量规则-导入模板.xlsx", "UTF-8"));
try (final InputStream inputStream = new ClassPathResource("template/test.txt").getInputStream();
final ServletOutputStream outputStream = response.getOutputStream()
) {
final byte[] bytes = new byte[2048];
int len;
while ((len = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, len);
}
}
} catch (UnsupportedEncodingException e) {
log.error("设置响应头出错", e);
} catch (IOException e) {
log.error("下载测试文件出错", e);
}
}
- 这种设置下载文件名的方式打包 jar 文件部署后下载文件的名字如果含有中文也是正常的,用 postman 测试下载的文件名会乱码。
- 待下载的文件存放路径为 resource/template/test.txt