一:具体实现
在Spring Boot中,可以使用MultipartFile类来实现文件上传功能。以下是一个基本的通用实现方式:
1.添加依赖
在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 创建文件上传控制器
创建一个名为`FileUploadController`的Java类,并添加以下代码:
@RestController
public class FileUploadController {
private static final String UPLOAD_DIR = "uploads/";
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return new ResponseEntity<>("请选择一个文件", HttpStatus.BAD_REQUEST);
}
String fileName = file.getOriginalFilename();
File dest = new File(UPLOAD_DIR + fileName);
try {
file.transferTo(dest);
return new ResponseEntity<>("文件上传成功:" + fileName, HttpStatus.OK);
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<>("文件上传失败:" + fileName, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
在这个例子中,我们创建了一个名为`FileUploadController`的控制器类,其中包含一个名为`uploadFile`的方法。该方法接收一个名为`file`的MultipartFile参数,用于处理上传的文件。我们将上传的文件保存到`uploads/`目录下。
3. 配置静态资源映射
在`src/main/resources`目录下的`application.properties`文件中,添加以下配置以启用静态资源映射:
spring.resources.static-locations=classpath:/static/,classpath:/public/,file:uploads/
直接从`/uploads/`目录访问。
我们现在可以运行应用程序并通过`/upload`端点上传文件。请注意,这个简单的示例没有进行任何安全性检查,例如验证文件类型或限制文件大小。
二:对于文件上传下载的一些思考
1.对于文件依赖的思考
对于加依赖这个好像是没有版本要求的,如果有安全,效率等方面的考虑可以试试更高的版本
2.对于业务实现的思考
文件上传控制器是一定要的,但是具体的业务实现中明显还是需要满足更多的功能,比如在数据库加一张文件资源上传表将上传文件的具体情况如文件类型,文件大小,文件名什么的记录一下,也可以继续加一张文件上传记录表将文件资源上传表的每个数据都做一个备份。
文件的其他处理就比较复杂了,有的公司有自己的文件上传和下载安全检查方法,直接调用就行了,自己也可以写,按照官方给的关于MultipartFile类的方法就可以很轻松的获得了如文件名什么的属性,直接在逻辑层处理就行了
3.对于文件的资源地址的思考
有更简单的方法直接写到本地磁盘里但是明显不可以所以不能用这样取巧的方法,这个资源目录就简单多了,但是还是要注意生产环境的配置