前言
来看看离过年还有一个月,已经想着放假的这位。
还有已经放假在家放飞自我,又会赚钱的另一位。
人与人的悲欢并不相通,我只是觉得他们吵闹。
正文
Spring Boot上传图片到项目根路径文件夹下
之前都是借助DFS分布式文件系统。
那现在为啥不用了呢?我就上传几张图片,再搭个DFS文件系统,这不高射炮打蚊子嘛,人间不值得。
文件写到本项目的跟路径下。
if (file.isEmpty()) {
return Result.fail("文件不能为空");
}
// 拿到文件名
String filename = file.getOriginalFilename();
// 存放上传图片的文件夹
String img = "static/upload/" + DateHelper.dateToStringYYYYMMDD(new Date());
// 构建上传文件的存放 "文件夹" 路径
String fileDirPath = new String("src/main/resources/" + img);
String url = InetAddress.getLocalHost().getHostAddress() + ":" + port + img;
File fileDir = new File(fileDirPath);
if(!fileDir.exists()){
// 递归生成文件夹
fileDir.mkdirs();
}
// 输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
File newFile = null;
try {
// 构建真实的文件路径
newFile = new File(fileDir.getAbsolutePath() + File.separator + filename);
file.transferTo(newFile);
} catch (IOException e) {
e.printStackTrace();
}
上传图片后返回的状态码是0,没问题,成功了呀!!!那项目的根目录下怎么没图片呢?
首先是上传文件成功了,但是去哪了不知道,这时候就需要打个断点排查了。
发现是少了路径。Spring Cloud项目,获取的绝对路径到父工程,那加上项目的子工程名是不是就完美解决了。
// 构建上传文件的存放 "文件夹" 路径
String fileDirPath = new String("shiyi/src/main/resources/" + img);
确实是,完美解决。搞完收工,感觉今天能下个早班啊!!!能回去和我家宝贝视频一起奋斗,美滋滋。
但是。。。通过url访问,结果显示404,我裂开了,怎么能404。明明文件夹下已经创建目录成功并且有了原文件,那怎么回事呢?
那怎么办?
重启!!! 重启能解决百分之99的问题。要是没解决,那就是电脑的问题了。
果然,重启从来没让我失望过,确实能访问了,但总不能上传一次图片,重启一次服务吧。
重启大招都用完了,无计可施,该怎么办呢? 百度。
//新增加一个类用来添加虚拟路径映射
@Configuration
public class FileUploadConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//获取文件的真实路径
String path = System.getProperty("user.dir")+"\\src\\main\\resources\\static\\upload\\";
//static/upload/**是对应resource下工程目录
registry.addResourceHandler("static/upload/**").addResourceLocations("file:"+path);
super.addResourceHandlers(registry);
}
}
百度的结果是需要配置虚拟文件路径的映射
配置后发现还是访问不了,是人品的问题嘛?当然。。。不是了。
太蠢了,前面刚少加了子工程的目录,到这里又忘记了。
//获取文件的真实路径
String path = System.getProperty("user.dir")+"\\shiyi\\src\\main\\resources\\static\\upload\\";
//static/upload/**是对应resource下工程目录
这次总没问题了吧,搞完收工。
上次点赞、在看的人已经脱单!!!你还在等什么,点个关注吧。