spring boot写一个文件下载上传的实例具体代码实现
时间: 2024-02-07 09:02:51 浏览: 105
好的,以下是一个简单的 Spring Boot 文件上传和下载实现的代码示例:
首先,创建一个上传文件的表单页面 upload.html:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form method="POST" enctype="multipart/form-data" action="/upload">
选择文件:<input type="file" name="file"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
```
然后,编写一个控制器类 FileController,实现文件上传和下载的逻辑:
```java
@RestController
public class FileController {
// 上传文件
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
// 获取上传文件的原始文件名
String fileName = file.getOriginalFilename();
// 保存文件到本地磁盘
file.transferTo(new File("D:/upload/" + fileName));
return "上传成功!";
}
// 下载文件
@GetMapping("/download/{fileName}")
public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
// 构造文件对象
File file = new File("D:/upload/" + fileName);
if(!file.exists()) {
return ResponseEntity.notFound().build();
}
// 构造文件下载响应体
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<>(Files.readAllBytes(file.toPath()), headers, HttpStatus.OK);
}
}
```
在上述代码中,`@PostMapping("/upload")` 注解表示该方法处理 HTTP POST 请求,并映射到 "/upload" 路径;`@RequestParam("file")` 注解表示获取上传的文件参数;`@GetMapping("/download/{fileName}")` 注解表示该方法处理 HTTP GET 请求,并映射到 "/download/{fileName}" 路径,其中的 `{fileName}` 表示动态的文件名参数。
在上传文件的方法中,我们首先获取上传文件的原始文件名,然后将文件保存到本地磁盘。在下载文件的方法中,我们先判断文件是否存在,如果不存在则返回 404 错误;如果存在则构造文件下载响应体,设置响应头信息,然后将文件内容写入到响应体中。
最后,在应用启动类中添加配置:
```java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// 配置静态资源目录
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/upload/");
}
}
}
```
在上述代码中,我们通过 `addResourceHandlers()` 方法配置静态资源目录,将 "/upload/**" 路径映射到本地磁盘上的 "D:/upload/" 目录下。这样,在访问上传的文件时,就可以通过 "/upload/{fileName}" 路径来访问了。
阅读全文