项目中遇到,记录一下。
解决SpringBoot上传图片后访问不到的问题
1.问题描述:
后端采用的架构是SpringBoot,前端是JavaScript。
当在前端上传图片之后,上传到指定的idea后端里面(没有使用云存储,存储在本地文件里面)
路径为:resources → static → **
已经上传成功,文件夹里面也有,但是需要刷新idea或者重起之后才能从页面访问到,不然一直是404。
访问 http://ip地址:端口号/static/**/xxx.png 这种图片是访问不到的。
2.出现原因:
原理是服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径,需要配置虚拟路径映射访问。
3.解决办法:
/static/** 映射到项目根目录下面。
访问 http://static/**/xxx.png
相当于访问 XXXXXX\src\main\resources\static\**\xxx.png
具体的代码如下:
@Configuration
public class BaseInterceptor extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/Jtopo/**").addResourceLocations("file:" + System.getProperty("user.dir")+"\\src\\main\\resources\\static\\img\\Jtopo\\");
super.addResourceHandlers(registry);
}
}
第一个参数是项目中需要映射路径的文件夹路径。
第二个参数是项目的实际目录,Windows和Linux的斜杠写法不同需要注意。
user.dir是java运行JVM的目录、工作空间,控制台打印一下就知道了。
另一个属性user.home指向用户目录。如/Users/myuser或/home/myuser或C:\Users\myuser。