今日主题:springboot文件上传及虚拟路径设置
简介
相信大家在做项目中会遇到一些情况,比如文件上传,但是大家会发现他上次的目录是
target
目录下,也就是说,只要target
目录没了,文件也就没了,这个是我们不想看到的,然后有些人就是直接将文件存到磁盘就好了啊,这个思路是没错的,但是我们在前端却不能直接引用磁盘里的真实路径的文件,因为这个存在安全问题,所以这个时候,我们就要用web服务器来帮我们做一个虚拟映射,我们访问一个虚拟路径,其实访问的就是本机的真实路径,这样保证了安全性。
环境
- springboot
实现过程
1、首先我们需要建立一个springboot
工程,依赖非常少只需要下面几个就行了
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2、创建一个非常简单的控制类
代码语言:javascript复制@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file){
//使用UUID生成唯一标识
String randomNumber = UUID.randomUUID().toString().replace("-", "");
//创建一个唯一标识作为评论的主键以及队伍的一个字段,方便用来保存数据将队伍与队伍描述建立起关系
//获取文件的原始名
String oldFilename = file.getOriginalFilename();
//使用FilenameUtils获得文件的后缀(先导依赖Commons-fileUpload)
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
//生成新的文件名(队伍名 随机数 后缀名)
String newFileName = randomNumber "." extension;
//使用ResourceUtils类路径再获取文件保存的路径
File dateDir = new File(uploadFolder);
if (!dateDir.exists()) {
//判断目录是否存在,不存在则直接创建
dateDir.mkdirs();
}
try {
file.transferTo(new File(uploadFolder, newFileName));
} catch (IOException e) {
e.printStackTrace();
return R.error("上传失败");
}
//上传完毕,存入数据库中的地址为:
String invented_address="http://127.0.0.1:" POST "/api/file/" newFileName;
return R.ok("上传成功,虚拟路径为:" invented_address);
}
3.我们需要添加一个配置类
代码语言:javascript复制 @Value("${file.staticAccessPath}")
private String staticAccessPath;
@Value("${file.uploadFolder}")
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" uploadFolder);
}
4、在yml文件中需要添加一些配置
代码语言:javascript复制###文件上传
file:
###静态资源对外暴露的访问路径
staticAccessPath: /api/file/**
###静态资源实际存储路径
uploadFolder: D:/static/teamImages/
###项目名
servlet:
context-path:
###文件上传
multipart:
enabled: true
max-file-size: 10mb
max-request-size: 10mb
5、需要写一个前端页面,来进行文件上传
我们可以在浏览器中直接访问该图片通过虚拟路径