spring boot中文件下载方法
使用HttpServletResponse,
1、转成StreamingResponseBody写入
HttpServletResponse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @GetMapping ( "/downloadFile" ) public void downloadFile(HttpServletResponse response) throws IOException { // 设置响应头,指定文件名 response.setHeader( "Content-Disposition" , "attachment; filename=file.txt" ); // 获取文件输入流 InputStream inputStream = new FileInputStream( "path/to/file.txt" ); // 创建StreamingResponseBody对象,将文件内容写入响应输出流 StreamingResponseBody responseBody = outputStream -> { byte [] buffer = new byte [ 1024 ]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != - 1 ) { outputStream.write(buffer, 0 , bytesRead); } inputStream.close(); }; // 返回StreamingResponseBody对象 response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); responseBody.writeTo(response.getOutputStream()); } |
2、转成Bytes写入
HttpServletResponse
@GetMapping("/downloadFiles")
public void downloadFile(HttpServletResponse response) throws IOException {
byte[] data = Files.readAllBytes(Paths.get("D:\\file.txt"));
// 设置响应头,指定文件名
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=file.txt");
response.addHeader("Content-Length", "" + data.length);
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.getOutputStream().write(data);
}
使用ResponseEntity类:
1、转成Bytes写入
ResponseEntity
1 2 3 4 5 6 7 8 9 10 11 12 | @GetMapping ( "/downloadFile" ) public ResponseEntity< byte []> downloadFile() throws IOException { // 读取文件内容到字节数组 byte [] fileContent = Files.readAllBytes(Paths.get( "path/to/file.txt" )); // 设置响应头,指定文件名 HttpHeaders headers = new HttpHeaders(); headers.setContentDisposition(ContentDisposition.attachment().filename( "file.txt" ).build()); // 返回文件内容和响应头 return ResponseEntity.ok().headers(headers).body(fileContent); } |
2、转成Resource写入
ResponseEntity
1 2 3 4 5 6 7 8 9 10 11 12 | @GetMapping ( "/downloadFile" ) public ResponseEntity<Resource> downloadFile() { // 创建Resource对象,表示文件路径 Resource fileResource = new FileSystemResource( "path/to/file.txt" ); // 设置响应头,指定文件名 HttpHeaders headers = new HttpHeaders(); headers.setContentDisposition(ContentDisposition.attachment().filename( "file.txt" ).build()); // 返回文件资源和响应头 return ResponseEntity.ok().headers(headers).body(fileResource); } |
3、转成InputStreamResource写入
ResponseEntity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @GetMapping ( "/downloadFile" ) public ResponseEntity<InputStreamResource> downloadFile() throws FileNotFoundException { // 创建文件输入流 FileInputStream fileInputStream = new FileInputStream( "path/to/file.txt" ); // 创建InputStreamResource对象,封装文件输入流 InputStreamResource resource = new InputStreamResource(fileInputStream); // 设置响应头,指定文件名 HttpHeaders headers = new HttpHeaders(); headers.setContentDisposition(ContentDisposition.attachment().filename( "file.txt" ).build()); // 返回InputStreamResource对象和响应头 return ResponseEntity.ok().headers(headers).body(resource); } |
4、转成ByteArrayResource写入
ResponseEntity
1 2 3 4 5 6 7 8 9 10 11 12 | @GetMapping ( "/downloadFiles" ) public ResponseEntity<ByteArrayResource> downloadFile() throws IOException { // 读取文件内容到字节数组 byte [] fileContent = Files.readAllBytes(Paths.get( "D:\\file.txt" )); ByteArrayResource resource = new ByteArrayResource(fileContent); // 设置响应头,指定文件名 HttpHeaders headers = new HttpHeaders(); headers.setContentDisposition(ContentDisposition.attachment().filename( "file9.txt" ).build()); // 返回文件内容和响应头 return new ResponseEntity<>(resource, headers, HttpStatus.OK); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具