这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战
首先说一个需求,就是我们上传图片文件,之后保存,我们在页面是可以直接访问的。按照正常的思路我们如果直接获取我们的文件路径那我们并不会存在一个正确的位置上,所以我们就需要使用
String realPath = ResourceUtils.getURL("classpath:").getPath() + "static";
这个路径。
我在最开始也是这么这么写的,在本地运行也是这么运行的,但是,我部署之后问题他就出现了,根本不好使,他会报一个 FileNotFoundException ,我是使用了各种各样的方法,去找他真实的路径啊,都不好使,最后,我一个同学的提醒,他说,这个是不是在jar里了,那问题他就出现了,如果在jar里,我们的文件好像是以流的方式存在的,我们就没办法这样去存。遇到了这些事情之后呢,我也就没办法了,我换了一种办法,直接在Linux部署的同级目录里存储。
public void updateRotation(@RequestPart("file") MultipartFile file) throws IOException {
//文件在linux中的储存位置,自己设置
String path = "/OJ/img";
//获取文件名
String nowFileName = file.getOriginalFilename();
File fileParent = new File(path);
//判断文件夹是否存在,没有则创建
if (!fileParent.exists()) {
fileParent.mkdirs();
}
//创建文件
File f = new File(path+"/",nowFileName);
if(!f.exists()){
f.createNewFile();
}
//存文件
file.transferTo(f);
}
大家可以直接拿去用,或者自己改一下文件路径就可以了,就算不改,他也会自己创建
上传成功之后,我们远程把删除
public void deleteRotation(@RequestParam("fileName") String fileName) throws FileNotFoundException {
String path = "/OJ/img";
File f = new File(path+"/", fileName);
boolean delete = f.delete();
}
这里我们要注意的就是我们的文件名要和刚刚写的文件名是一样的,路径也要正确,否则是不能删成功的
最后,我们上传图片是要干嘛,是要看啊,那我们怎么去访问我们的图片呢?
首先,在我们的MVC中进行配置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/**").addResourceLocations("file:/OJ/img/");
}
后面是我们文件的真实路径,记住一定要加前面的 file: 和后面的 / 好多人都忘记后面的斜杠是不可以的,
而我们的第一个配的路径就是我们需要在我们的页面访问的路径,如果配置拦截器了,我们呢要需要再拦截器中开放一下
最后就是展示一下

![9{C~]U$5J@I}J2YN}(5TZ]X.png](p6-juejin.byteimg.com/tos-cn-i-k3…?)