文件上传功能(一)
总说
过程参考黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili
目录
总说
一、功能实现
1.1 Controller层
二、优化
一、功能实现
1.1 Controller层
在contoller层,创建一个FileUploadController
在桌面创建一个文件夹,命名files
同时复制文件夹路径,如下图:
FileUploadController代码如下:
@RestController
public class FileUploadController {
@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws IOException { //MultipartFile file 用来接收上传的文件
//把文件的内容存到本地磁盘上
String originFilename = file.getOriginalFilename();// 获取原始文件名
file.transferTo(new File("C:\\Users\\86176\\Desktop\\files\\" + originFilename));//将接收到的文件内容写入到本地磁盘上
return Result.success("url访问地址....");
}
}
测试一下:
图片随便上传一个即可
上传成功:
同时在我们的目标路径下,我们可以看到图片已经传进去了
二、优化
但是存在一个bug,同一个文件上传会覆盖,而不是2个文件
是因为我们上传的是原始文件名,所以我们要保证文件的名字要是唯一的,从而防止文件名被覆盖
我们修改FileUploadController代码如下:
@RestController
public class FileUploadController {
@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws IOException { //MultipartFile file 用来接收上传的文件
//把文件的内容存到本地磁盘上
String originFilename = file.getOriginalFilename();// 获取原始文件名
//保证文件的名字唯一,防止文件名被覆盖
//用UUID.randomUUID().toString() 生成一个随机的字符串 + 原始文件名后缀
String fileName = UUID.randomUUID().toString() + originFilename.substring(originFilename.lastIndexOf("."));
file.transferTo(new File("C:\\Users\\86176\\Desktop\\files\\" + fileName));//将接收到的文件内容写入到本地磁盘上
return Result.success("url访问地址....");
}
}
重新启动,进行测试
我们查看目的文件夹,如下:
这样就解决了文件覆盖问题