通过springmvc下载文件有哪些方式
时间: 2023-08-02 22:12:13 浏览: 49
通过SpringMVC,可以使用以下方式下载文件:
1. 使用 HttpServletResponse 的 OutputStream 将文件流写入响应中,然后通过设置响应的 Content-Disposition 头信息来指定文件名和下载方式。
2. 使用 Spring 的 Resource 接口获取文件流,并使用 Spring 的 ResponseEntity 返回文件流,通过设置响应头信息来指定文件名和下载方式。
以下是两种方式的样例代码:
1. 使用 HttpServletResponse:
```java
@RequestMapping("/download")
public void downloadFile(HttpServletResponse response) throws IOException {
String fileName = "example.pdf";
String filePath = "/path/to/example.pdf";
File file = new File(filePath);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
response.setHeader("Content-Length", String.valueOf(file.length()));
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.flush();
outputStream.close();
fileInputStream.close();
}
```
2. 使用 Spring 的 Resource 和 ResponseEntity:
```java
@RequestMapping("/download")
public ResponseEntity<Resource> downloadFile() {
String fileName = "example.pdf";
String filePath = "/path/to/example.pdf";
File file = new File(filePath);
Resource resource = new FileSystemResource(file);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
```
这些方法都可以用于下载文件,具体使用哪种方式取决于你的需求和代码实现。