Java实现文件下载的方式有很多种,这里记录的是其中一种,以浏览器的方式下载文件。
- 后段代码
/**
* 文件下载
* @param name 文件名称
*/
@GetMapping("/download")
public ResponseEntity<FileSystemResource> download(@RequestParam("name") String name) {
if (Objects.isNull(name)) {
throw new RuntimeException("文件名称不能为空");
}
// directoryPath为服务器文件路径
String path = directoryPath + "/" + name;
File file = new File(path);
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", "attachment; filename=" + file.getName());
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
headers.add("Last-Modified", new Date().toString());
headers.add("ETag", String.valueOf(System.currentTimeMillis()));
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new FileSystemResource(file));
}
- 前端代码调用
// 文件下载
function download(fileName) {
window.location.href = window.location.protocol + "//"
+ window.location.host
+ "/download?name=" + fileName;
}
代码很简单,拿来即用。