解决springboot项目打成jar包部署到linux服务器后上传图片无法访问的问题
前言:目前大三,自己也在学习和摸索的阶段。在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成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服务器后上传图片无法访问的问题的更多相关文章
- SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...
- 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...
- windows环境jar包部署到linux服务器,一键操作
背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...
- springboot项目打成jar包后台运行在linux上
背景:springboot2为为主体搭建的项目,直接打成jar包,上传到linux上面 启动项目:java -jar xx.jar 这样很方便,但是不能关闭窗口,否则项目就停了 后台启动: nohup ...
- SpringBoot项目打成Jar包时运行
使用java -jar ***.jar执行jar包的时候,会找jar包中的main()方法. 对于SpringBoot项目的Jar包,在META-INF目录下的MANIFEST.MF文件中,Main- ...
- JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...
- idea将springboot项目打成jar包
1.首先,找到pom.xml,把下面的build块中的内容改成如下所示 <build> <plugins> <plugin> <groupId>org. ...
- eclipse中,将springboot项目打成jar包
1.右击项目,选择Run As - Maven clean 2.右击项目,选择Run As - Maven install 3.成功后 会在项目的target文件夹下生成jar包 4.将打包好的jar ...
- 在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
1.maven教程官网 https://m.runoob.com/maven/ 2.理解Maven的构建生命周期(clean.Package) 3.在项目中使用maven进行打包 4.运行打包好的ja ...
随机推荐
- hdu3516 Tree Construction
Problem Description Consider a two-dimensional space with a set of points (xi, yi) that satisfy xi & ...
- 洛谷 P1077 摆花 (背包DP)
题意:有\(n\)种花,每种花有\(a_i\)盆,现在要摆\(m\)盆花,花的种类从\([1,n]\)有序排放,问有多少种方案数. 题解:这题可以借用01背包的思路,感觉更好想一点,我们首先枚举\(n ...
- F(x) HDU - 4734
题意: 给你一个n位的数x(A(n)A(n-1)...A(1)),那么F(x)=A(n)*2^(n-1)+A(n-1)*2^(n-2)......+A(1)*2^(0) 题目输入A.B 你需要找出来在 ...
- WSL2 VS Code远程开发准备
上一节我们在linux中创建了mvc项目,但是要是在linux中用命令行直接开发的话,就有些扯了. 我们可以使用VS Code进行远程开发,简单来说,就是在windows中打开VS Code,打开Li ...
- Python——Django框架——邮件
#引用EMAIL服务 EMAIL_BACKEND = 'django.cpre.mail.backends.smtp.EmailBackend' #EMAIL发送服务器 EMAIL_HOST = 's ...
- URAL 1132 Square Root(二次剩余定理)题解
题意: 求\(x^2 \equiv a \mod p\) 的所有整数解 思路: 二次剩余定理求解. 参考: 二次剩余Cipolla's algorithm学习笔记 板子: //二次剩余,p是奇质数 l ...
- hdu5693D++游戏 区间DP-暴力递归
主要的收获是..如何优化你递推式里面不必要的决策 之前的代码 这个代码在HDU超时了,这就对了..这个复杂度爆炸.. 但是这个思路非常地耿直..那就是只需要暴力枚举删两个和删三个的情况,于是就非常耿直 ...
- Linux Bash Script conditions
Linux Bash Script conditions shell 编程之条件判断 条件判断式语句.单分支 if 语句.双分支 if 语句.多分支 if 语句.case 语句 refs http:/ ...
- Bazinga means
Bazinga means Bazinga https://www.dictionary.com/e/slang/bazinga/ refs xgqfrms 2012-2020 www.cnblogs ...
- Ajax & JSONP 原理
Ajax & JSONP 原理 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就 ...