由于项目涉及到了大量图片资源,即图片上传功能,总不能上传图片至Jar包内部吧,所以需要在jar包外设置资源路径来保存图片及其他资源。
对于其他框架我们一般使用war包部署到tomcat下,很方便就可以设置资源路径。
而SpringBoot项目自身集成tomcat,如果你真的向我一样作🧨,咱就想使用Jar包部署那就需要进行一些小小的配置。
其实也无非就是添加一个静态资源映射addResourceHandlers,新建一个类继承自WebMvcConfigurer
需要注意的是:
- Window上的路径以" \ "来分隔
- Linux中是以" / "来分隔的
- 所以对于项目中有路径配置的地方都需要更改!(如图片上传路径、图片获取的路径)
@Configuration
public class MallWebMvcConfigurer implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
// 这里通常配置项目的拦截器操作
}
/**
* 添加虚拟目录👇👇👇这里就是我们解决问题的重点了
* 静态资源映射
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
//registry.addResourceHandler("/goods-img/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
//================上面是Window上的路径配置
//================下面是Linux上的路径配置
File path = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String gitPath = path.getParentFile().getParentFile().getParent() + File.separator + "myresource" + File.separator + "upload" + File.separator;
//上面gitpath其实是对文件路径做了一个拼接,File.separator根据系统自动获取路径是反斜杠还是正斜杠
//classpath:后面的路径就是你资源文件的绝对路径了,注意路径末尾也还有一个斜杠
registry.addResourceHandler("/upload/**").addResourceLocations(gitPath);
//上面等同于:registry.addResourceHandler("/upload/**").addResourceLocations("classpath:/home/shiers/project/jvshijimall/project/myresource/upload/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
然后记得在Linux中创建你的资源文件夹,将资源存进去就可以了
👇这是我的jar包和资源文件路径
最后将项目运行通过 你的域名/upload/xxxx.jpg 就可以远程访问文件中的图片了
其他问题可以查看👉SpringBoot项目Jar包部署至Linux上遇到的问题