SpringBoot下载文件到浏览器
时间: 2024-09-25 09:03:37 浏览: 64
在Spring Boot中,下载文件到浏览器通常通过HTTP响应头控制Content-Disposition来实现。你可以创建一个简单的Controller方法,将文件作为响应体返回,并设置合适的头信息。以下是一个基本示例:
```java
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@GetMapping("/download-file")
public ResponseEntity<ByteArrayResource> downloadFile(@RequestParam("file") MultipartFile file) throws IOException {
// 检查文件是否上传成功
if (file.isEmpty()) {
return ResponseEntity.badRequest().build();
}
// 将MultipartFile转换为File对象
Path filePath = Paths.get("path/to/save/downloaded/file", file.getOriginalFilename());
Files.write(filePath, file.getBytes());
// 创建 ByteArrayResource 对象表示文件内容
ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(filePath));
// 设置HTTP响应头,指定文件名和浏览器下载属性
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("filename", file.getOriginalFilename());
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 返回 ResponseEntity,包含资源和响应头
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
```
在这个例子中,用户通过HTTP GET请求访问`/download-file`并传递文件字段(file),服务器会将文件保存到指定路径,然后创建一个可以流式传输给客户端的ByteArrayResource。
阅读全文