前言:目前大三,自己也在学习和摸索的阶段。在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成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服务器不够熟悉所造成的,在今后的学习生活中还应该不断地保持学习态度,如果有任何错误的地方也欢迎大家批评改正,一起进步!

解决springboot项目打成jar包部署到linux服务器后上传图片无法访问的问题的更多相关文章

  1. SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题

    看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...

  2. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  3. windows环境jar包部署到linux服务器,一键操作

    背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...

  4. springboot项目打成jar包后台运行在linux上

    背景:springboot2为为主体搭建的项目,直接打成jar包,上传到linux上面 启动项目:java -jar xx.jar 这样很方便,但是不能关闭窗口,否则项目就停了 后台启动: nohup ...

  5. SpringBoot项目打成Jar包时运行

    使用java -jar ***.jar执行jar包的时候,会找jar包中的main()方法. 对于SpringBoot项目的Jar包,在META-INF目录下的MANIFEST.MF文件中,Main- ...

  6. JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...

  7. idea将springboot项目打成jar包

    1.首先,找到pom.xml,把下面的build块中的内容改成如下所示 <build> <plugins> <plugin> <groupId>org. ...

  8. eclipse中,将springboot项目打成jar包

    1.右击项目,选择Run As - Maven clean 2.右击项目,选择Run As - Maven install 3.成功后 会在项目的target文件夹下生成jar包 4.将打包好的jar ...

  9. 在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)

    1.maven教程官网 https://m.runoob.com/maven/ 2.理解Maven的构建生命周期(clean.Package) 3.在项目中使用maven进行打包 4.运行打包好的ja ...

随机推荐

  1. L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法

    vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置.另外再找一个数组来 ...

  2. 洛谷 P5837 [USACO19DEC]Milk Pumping G (单源最短路,dijkstra)

    题意:有一\(n\)个点,\(m\)条边的双向图,每条边都有花费和流量,求从\(1\)~\(n\)的路径中,求\(max\frac{min(f)}{\sum c}\). 题解:对于c,一定是单源最短路 ...

  3. 一篇文章搞懂G1收集器

    一.何为G1收集器 The Garbage-First (G1) garbage collector is a server-style garbage collector, targeted for ...

  4. Spring Boot @Enable*注解源码解析及自定义@Enable*

      Spring Boot 一个重要的特点就是自动配置,约定大于配置,几乎所有组件使用其本身约定好的默认配置就可以使用,大大减轻配置的麻烦.其实现自动配置一个方式就是使用@Enable*注解,见其名知 ...

  5. [Golang]-4 错误处理、Panic、Defer

    目录 错误和异常 案例 Panic Defer 使用 defer+recover 来处理错误 参考文章: Go 语言使用一个独立的·明确的返回值来传递错误信息的.这与使用异常的 Java 和 Ruby ...

  6. MySQL——时间、字符串、时间戳相互转换

    一.时间转字符串 select data_format(now(),'%Y-%m-%d %H:%i:%s'); 二.时间转时间戳 select unix_timestamp(now()); 三.字符串 ...

  7. LINUX - 文件读写缓存

    遇到一个进程core掉后日志打印不出来的问题: 参考如下: [引用] 只有正常退出,才能做到flush.否则将写失败. 之后有百度了下中文资料,发现同样的结论. "fflush库函数的作用是 ...

  8. VS2010下如何查看类的内存布局

    用VS2010查看类的内存布局,这里用两种方法 (1)MSVC有个隐藏的"/d1"开关,通过这个开关可以查看项目中类的内存布局情况. 修改项目属性,添加"/d1 repo ...

  9. Cortex-M系列内核 启动文件分析

    最近终于闲了下来了准备好好学习下Cortex-M3/M4系列处理器的架构,经过各种资料的折磨也没法对它的整个工作过程能有个完整的认知,最后看到一片博客打算从程序的运行过程开始探究,所以首先就找到了启动 ...

  10. 二分类问题中混淆矩阵、PR以及AP评估指标

    仿照上篇博文对于混淆矩阵.ROC和AUC指标的探讨,本文简要讨论机器学习二分类问题中的混淆矩阵.PR以及AP评估指标:实际上,(ROC,AUC)与(PR,AP)指标对具有某种相似性. 按照循序渐进的原 ...