解决springboot项目打成jar包部署到linux服务器后上传图片无法访问的问题
<p><strong>前言</strong>:目前大三,自己也在学习和摸索的阶段。在和学校的同学一起做前后端分离项目的时候,我们发现将后端打包成jar,然后部署到服务器中通过java -jar xxx.jar运行项目以后,项目中存在文件上传的接口(上传位置在项目resources/static下)上传文件以后前端竟然无法访问显示!而我自己在我的本机电脑启动项目则没有任何的问题???在网上找了很多的经验发现没有能够解决我的问题的,经过不断地调试试错,终于解决了,发布出来记录一下踩坑经历,也希望能够帮助到遇见同样问题的朋友们。</p><p> <span style="text-decoration: underline"><strong>说明</strong></span>:java项目打包成为jar包以后,在linux服务器上通过java -jar命令运行。linux是无法解压jar包的,也就是无法访问到resources/static里面存放的静态图片。jar包只能用于跑代码!</p>
<p> <strong>解决方案:</strong>在linux文件夹jar包存在的同级目录中创建文件上传的文件夹,并更改文件上传的路径。如图所示</p>
<p><img src="https://img2020.cnblogs.com/blog/2070707/202103/2070707-20210304093445065-307816671.png"></p>
<p><strong>程序内部文件上传的路径为:</strong></p>
<p><img src="https://img2020.cnblogs.com/blog/2070707/202103/2070707-20210304093643511-1838194177.png"></p>
<p> <strong>配置类配置映射器:</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span> cn.hongyuan.handler.*<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.context.annotation.Bean;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> org.springframework.context.annotation.Configuration;
</span><span style="color: rgba(0, 0, 255, 1)">import</span> org.springframework.web.servlet.config.annotation.*<span style="color: rgba(0, 0, 0, 1)">;
@Configuration
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MyWebConfig<span style="color: rgba(0, 0, 255, 1)">implements</span><span style="color: rgba(0, 0, 0, 1)"> WebMvcConfigurer{
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> addResourceHandlers(ResourceHandlerRegistry registry) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取文件的真实路径 work_project代表项目工程名 需要更改</span>
<span style="color: rgba(0, 0, 0, 1)">
String os </span>= System.getProperty("os.name"<span style="color: rgba(0, 0, 0, 1)">);
String path2 </span>= System.getProperty("user.dir") + "\\src\\main\\resources\\static\\images\\avatar\\"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (os.toLowerCase().startsWith("win"<span style="color: rgba(0, 0, 0, 1)">)) {
String path </span>= System.getProperty("user.dir") + "\\src\\main\\resources\\static\\uploads\\"<span style="color: rgba(0, 0, 0, 1)">;
registry.addResourceHandler(</span>"/uploads/**"<span style="color: rgba(0, 0, 0, 1)">).
addResourceLocations(</span>"file:" +<span style="color: rgba(0, 0, 0, 1)"> path);
registry.addResourceHandler(</span>"/images/avatar/**"<span style="color: rgba(0, 0, 0, 1)">)
.addResourceLocations(</span>"file:"+<span style="color: rgba(0, 0, 0, 1)">path2);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span> {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">linux和mac系统 可以根据逻辑再做处理</span>
<span style="color: rgba(0, 0, 0, 1)"> ;
registry.addResourceHandler(</span>"/uploads/**"<span style="color: rgba(0, 0, 0, 1)">).
addResourceLocations(</span>"file:" + System.getProperty("user.dir") + System.getProperty("file.separator"<span style="color: rgba(0, 0, 0, 1)">)
</span>+ "uploads"+ System.getProperty("file.separator"<span style="color: rgba(0, 0, 0, 1)">));
registry.addResourceHandler(</span>"/images/avatar/**"<span style="color: rgba(0, 0, 0, 1)">).
addResourceLocations(</span>"file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + "images"
+ System.getProperty("file.separator") + "avatar" + System.getProperty("file.separator"<span style="color: rgba(0, 0, 0, 1)">));
}
registry.addResourceHandler(</span>"swagger-ui.html"<span style="color: rgba(0, 0, 0, 1)">)
.addResourceLocations(</span>"classpath:/META-INF/resources/"<span style="color: rgba(0, 0, 0, 1)">);
registry.addResourceHandler(</span>"/webjars/**"<span style="color: rgba(0, 0, 0, 1)">)
.addResourceLocations(</span>"classpath:/META-INF/resources/webjars/"<span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<p> </p>
<p><strong> 配置文件配置静态资源放行路径:</strong></p>
<div class="cnblogs_code">
<pre>spring.resources.<span style="color: rgba(0, 0, 255, 1)">static</span>-locations=classpath:/<span style="color: rgba(0, 0, 255, 1)">static</span>,classpath:/resources,file:/home/xinyou/uploads/,file:/home/xinyou/images/avatar/</pre>
</div>
<p> </p>
<h4>至此,大功告成!</h4>
<p> </p>
<p> </p>
<p> </p>
<p> <strong>ps: </strong>我之前的文件上传书写方式也是在网上查询的一些代码,上传文件的路径多在windows环境下,确实没有任何问题,但是一部署到linux就出现问题了,还是由于自己对linux服务器不够熟悉所造成的,在今后的学习生活中还应该不断地保持学习态度,如果有任何错误的地方也欢迎大家批评改正,一起进步!</p>
</div>
<div id="MySignature" role="contentinfo">
新手入门阶段,希望能够和大家一起进步!<br><br>
来源:https://www.cnblogs.com/xy2559/p/14478464.html
頁:
[1]