SpringBoot打jar包-下载文件时报错-class path resource xxxxxx cannot be resolved to URL because it does not exist
一、问题由来
新项目的开发中,打包方式由war包改为了jar包的方式,这样在部署的时候更加的方便。测试环境使用pm2这个工具来管理项目的运行,停止,重启等等非常方便。
可是当测试人员在测试项目中的文件下载时,就报了一个奇怪的错误,class path resource xxxxxx cannot be resolved to URL because it does not exist。大意就是说
某个路径下的资源文件不存在,下载的是模板excel文件,项目中就直接把它放在resources路径下,在该路径下又创建了一个目录用于统一存放模板。测试人员提BUG
后,我们开发就得想办法解决,一步一步排查问题,分析问题,解决问题。
二、问题分析
首先确定一点,将项目打成war包时都是好好的,可以正常下载。现在打成jar包进行发布,怎么突然就不行了呢?于是我找到该段代码进行分析,如下:

最开始写文件下载那个人,是使用一个统一的方法进行下载,首先将需要下载的模板文件信息统一配置在配置文件当中。

使用一个配置类统一的进行读取,页面中需要下载什么模板时,只需要传入对应的类型即可,这样操作很方便,并且可以动态配置。可是在读取的时候处理
方式有些特别,首先是通过类 ClassPathResource 类进行读取,然后将读取到的内容转换为一个File文件,在将这个文件转换为字节数组,响应给前端。看到
这里时我认为这种操作有些多余,并且在看了好几篇博客后,尝试着进行更改代码。
三、解决方案
改动的方式为读取文件的方式还是一样,只是不在做复杂的转换,读取到文件内容后,直接获取其输入流,然后将输入流转换为字节流即可。
InputStream is = resource.getInputStream();
byte[] outBytes = IOUtils.toByteArray(is);
只改动这两句,修改完后重写打包测试,问题解决。由此可以判断,问题就出在将获取的文件内容转换为文件,然后在将文件转换为字节数组这步操作。
参考文章一
https://www.jianshu.com/p/7d7e5e4e8ae3
参看文章二
https://www.cnblogs.com/suizhikuo/p/13413738.html
参考文章三
https://blog.csdn.net/qq_34896199/article/details/107082991
SpringBoot打jar包-下载文件时报错-class path resource xxxxxx cannot be resolved to URL because it does not exist的更多相关文章
- spring 编译时抱错纪录class path resource [spring/] cannot be resolved to URL because it does not exist
class path resource [spring/] cannot be resolved to URL because it does not exist; 在 pom.xml 里添加如下代码 ...
- 解决springboot读取jar包中文件的问题
转载自: https://www.oschina.net/question/2272552_2269641 https://stackoverflow.com/questions/25869428/c ...
- Linux下载文件时报错 To connect to ohse.de insecurely, use ‘--no-check-certificate’.
远程调用下载文件直接用wget就可以,一般文件路径类型是http.如果有遇到是https就会下载出错. 错误如下: [root@vmu010226-node1 tmp]# wget https://w ...
- 有关Struts下载文件时报错问题
在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样:到最后测试下载的时候出现了如下的错误: 而老师的写的代码可以完美运行,以下是跟着老师敲的代码: package c ...
- idea中的pom文件中的jar包下载不了,手动下载jar包的方法
问题描述: 在pom文件中添加依赖的时候,程序怎么着都是下载不了,而且实验了各种方式: IDEA引MAVEN项目jar包依赖导入问题解决 https://www.cnblogs.com/a845701 ...
- json学习系列(1)-使用json所要用到的jar包下载
内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易 ...
- springboot打jar包,调用webservice出错
错误提示 Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC 在idea中没有问题,但是打成 ...
- springboot打成jar包后无法解压
springboot打成jar包后无法解压 Springboot打出来的jar,用压缩工具解压报错.Why? 先说解决办法. 1.解决办法 executable属性导致的,属性改成false后重新打包 ...
- Maven Jar包下载失败及解决方案
我是阿福,公众号「阿福聊编程」作者,一个在后端技术路上摸盘滚打的程序员,在进阶的路上,共勉! 文章已收录在 JavaSharing 中,包含Java技术文章,面试指南,资源分享. 明显的下载失败 具体 ...
随机推荐
- 嗨,你知道吗,Spring还有这些高级特性!
目录 Spring介绍 设计理念 核心组件的协同工作 设计模式的应用 代理模式 策略模式 特性应用 事件驱动编程 异步执行 定时任务 日常开发使用非常多的Spring,它的设计理念是什么呢?有哪些核心 ...
- 三维 WebGIS 新玩具:OpenGlobus
代码仓库地址:https://github.com/openglobus/openglobus 原创.@秋意正寒 目录 1 简介 2 HelloGlobus 3 在 Vite 中与 vue3 集成 4 ...
- 1030 Travel Plan
A traveler's map gives the distances between cities along the highways, together with the cost of ea ...
- 【JDK8】Java8 LocalDate操作时间和日期的API
时间项目中的涉及到的时间处理非常多,犹豫SimpleDateFormat的不安全性以及Calendar等类在计算时比较复杂, 往往我们都会使用工具类来封装较多的日期处理函数, 但是JDK8中新增了操作 ...
- python 实现最有对其
print("|","Ursula".ljust(20,""),"|") # 左对齐 print("|&quo ...
- hdu1960 最小路径覆盖
题意: 给你明天的出租车订单,订单中包含每个人的起点和终点坐标,还有时间,如果一辆出租车想接一个乘客必须在每个订单前1分钟到达,也就是小于等于time-1,问你完成所有订单要最少多少量出租 ...
- Linux中编写Shell脚本
目录 Shell Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令 ...
- 神经网络与机器学习 笔记—Rosenblatt感知机
Rosenblatt感知机器 感知器在神经网络发展的历史上占据着特殊位置:它是第一个从算法上完整描述的神经网络.它的发明者Rosenblatt是一位心里学家,在20世纪60年代和70年代,感知器的启发 ...
- 【HTML】HTML5从入门到深入(复习查漏向
HTML5从入门到深入(复习查漏向 冷知识 万维网之始:第一个网站·蒂姆伯纳斯-李 HTML5 html5文档类型声明: 头部: <!doctype html> 字符集(charset): ...
- linux当前运行进程
一:linux查询服务器服务进程 inux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照, 就是执行ps命令的那个时刻的 ...