需求背景
最近在做一个用户自定义上传头像的小需求,用户上传头像然后需要立马回显。
需求是很常见的、正当的需求。如果不使用到对象存储这类服务,我们把用户头像的图片文件仅存在本地就可以了。我们在开发的过程中为了工程管理方便通常下意识会将图片上传目录设置为代码工程的一个子目录。问题就出在这里。
现象分析
因为静态资源文件在工程启动的时候就已经加载完成了,用户上传的头像不会再加载到程序内存中。所以这样会导致一个问题,我们在前端操作头像图片文件上传。头像文件也确实上传到了指定目录下面。但是前端访问获取图片资源就是获取不到,报错404。
解决方案
自己检索了一下问题,除了本身上传代码就有问题之外,基本大家给出的方案包含两个方向:
- 配置工程热启动(x)
- 修改图片上传目录为代码工程之外的目录(√)
”配置工程热启动“这个方法十分繁琐,需要在工程中引入热启动依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>
并且需要配置IDEA,最糟糕的是没有效果!!!
最后可行的解决方案我只找到这个:修改图片上传目录为代码工程之外的目录。
传送门
- 解决SpringBoot + Vue图片上传后不立刻回显的问题:https://springboot.io/t/topic/4806