前言 :目前大三,自己也在学习和摸索的阶段。在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成jar,然后部署到服务器中通过java -jar xxx.jar运行项目以后,项目中存在文件上传的接口(上传位置在项目resources/static下)上传文件以后前端竟然无法访问显示!而我自己在我的本机电脑启动项目则没有任何的问题???在网上找了很多的经验发现没有能够解决我的问题的,经过不断地调试试错,终于解决了,发布出来记录一下踩坑经历,也希望能够帮助到遇见同样问题的朋友们。

说明 :java项目打包成为jar包以后,在linux服务器上通过java -jar命令运行。linux是无法解压jar包的,也就是无法访问到resources/static里面存放的静态图片。jar包只能用于跑代码!

解决方案: 在linux文件夹jar包存在的同级目录中创建文件上传的文件夹,并更改文件上传的路径。如图所示

程序内部文件上传的路径为:

配置类配置映射器:

import cn.hongyuan.handler.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class MyWebConfig  implements WebMvcConfigurer  {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //获取文件的真实路径 work_project代表项目工程名 需要更改
        String os = System.getProperty("os.name");
        String path2 = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\avatar\\";
        if (os.toLowerCase().startsWith("win")) {
            String path = System.getProperty("user.dir") + "\\src\\main\\resources\\static\\uploads\\";
            registry.addResourceHandler("/uploads/**").
                    addResourceLocations("file:" + path);
            registry.addResourceHandler("/images/avatar/**")
                    .addResourceLocations("file:"+path2);
        }else {//linux和mac系统 可以根据逻辑再做处理
            registry.addResourceHandler("/uploads/**").
                    addResourceLocations("file:" + System.getProperty("user.dir") + System.getProperty("file.separator")
                                          + "uploads"+ System.getProperty("file.separator"));
            registry.addResourceHandler("/images/avatar/**").
                    addResourceLocations("file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + "images"
                            + System.getProperty("file.separator") + "avatar" + System.getProperty("file.separator"));
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

 配置文件配置静态资源放行路径:

spring.resources.static-locations=classpath:/static,classpath:/resources,file:/home/xinyou/uploads/,file:/home/xinyou/images/avatar/

至此,大功告成!

   ps: 我之前的文件上传书写方式也是在网上查询的一些代码,上传文件的路径多在windows环境下,确实没有任何问题,但是一部署到linux就出现问题了,还是由于自己对linux服务器不够熟悉所造成的,在今后的学习生活中还应该不断地保持学习态度,如果有任何错误的地方也欢迎大家批评改正,一起进步!

新手入门阶段,希望能够和大家一起进步!