springboot实现文件的上传下载
时间: 2024-02-09 17:12:21 浏览: 21
Spring Boot 实现文件上传下载可以使用 Spring MVC 的 MultipartFile 类。
文件上传:
1. 在 HTML 页面中添加一个表单,用于上传文件:
```html
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="file" name="file" />
<input type="submit" value="上传" />
</form>
```
2. 在 Spring MVC 的 Controller 中处理上传文件:
```java
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
try {
// 获取上传的文件名和文件流
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
// 将文件保存到服务器
File dest = new File("uploads/" + fileName);
FileUtils.copyInputStreamToFile(inputStream, dest);
// 返回上传成功的消息
redirectAttributes.addFlashAttribute("message", "文件上传成功!");
} catch (IOException e) {
e.printStackTrace();
redirectAttributes.addFlashAttribute("message", "文件上传失败!");
}
return "redirect:/";
}
```
其中,@RequestParam 注解用于获取上传的文件,MultipartFile 类是 Spring MVC 提供的用于处理文件上传的类。getOriginalFilename() 方法可以获取上传的文件名,getInputStream() 方法可以获取上传的文件流。将上传的文件保存到服务器的代码中,我们使用了 FileUtils.copyInputStreamToFile() 方法。
文件下载:
1. 在 HTML 页面中添加链接,用于下载文件:
```html
<a href="/download?fileName=example.txt">下载文件</a>
```
2. 在 Spring MVC 的 Controller 中处理文件下载请求:
```java
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@RequestParam("fileName") String fileName) {
// 获取要下载的文件
File file = new File("uploads/" + fileName);
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);
}
```
其中,@RequestParam 注解用于获取 URL 参数,Resource 类是 Spring 提供的用于处理文件下载的类。设置响应头的代码中,我们使用了 HttpHeaders.CONTENT_DISPOSITION 常量,告诉浏览器要下载文件。将文件流返回的代码中,我们使用了 ResponseEntity 类,设置文件的 MIME 类型和长度,以及响应的实体内容(即文件流)。
以上就是 Spring Boot 实现文件上传下载的方法。