一、问题由来

  新项目的开发中,打包方式由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的更多相关文章

  1. 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 里添加如下代码 ...

  2. 解决springboot读取jar包中文件的问题

    转载自: https://www.oschina.net/question/2272552_2269641 https://stackoverflow.com/questions/25869428/c ...

  3. Linux下载文件时报错 To connect to ohse.de insecurely, use ‘--no-check-certificate’.

    远程调用下载文件直接用wget就可以,一般文件路径类型是http.如果有遇到是https就会下载出错. 错误如下: [root@vmu010226-node1 tmp]# wget https://w ...

  4. 有关Struts下载文件时报错问题

    在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样:到最后测试下载的时候出现了如下的错误: 而老师的写的代码可以完美运行,以下是跟着老师敲的代码: package c ...

  5. idea中的pom文件中的jar包下载不了,手动下载jar包的方法

    问题描述: 在pom文件中添加依赖的时候,程序怎么着都是下载不了,而且实验了各种方式: IDEA引MAVEN项目jar包依赖导入问题解决 https://www.cnblogs.com/a845701 ...

  6. json学习系列(1)-使用json所要用到的jar包下载

    内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易 ...

  7. springboot打jar包,调用webservice出错

    错误提示 Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC 在idea中没有问题,但是打成 ...

  8. springboot打成jar包后无法解压

    springboot打成jar包后无法解压 Springboot打出来的jar,用压缩工具解压报错.Why? 先说解决办法. 1.解决办法 executable属性导致的,属性改成false后重新打包 ...

  9. Maven Jar包下载失败及解决方案

    我是阿福,公众号「阿福聊编程」作者,一个在后端技术路上摸盘滚打的程序员,在进阶的路上,共勉! 文章已收录在 JavaSharing 中,包含Java技术文章,面试指南,资源分享. 明显的下载失败 具体 ...

随机推荐

  1. Day17_104_IO_BufferReader接收用户输入

    BufferReader接收用户输入 **标准输入\输出流 java.lang.System** - static InputStream in - static PrintStream out im ...

  2. Day01_07_Java关键字和字面值

    关键字 https://www.cnblogs.com/chenglc/p/6922834.html 字面值(所见即所得的数据) 10 100 3.14 'a' "abc" tur ...

  3. 终于可以像使用 Docker 一样丝滑地使用 Containerd 了

    有追求的工程师一般都是有技术洁癖的,云原生的世界更是如此,Kubernetes虽然制定了容器运行时接口(CRI)标准,但早期能用的容器运行时只有Docker,而Docker 又不适配这个标准,于是给 ...

  4. C#搞个跨平台的桌面NES游戏模拟器

    支持Windows,Mac,Linux    NES模拟器内核源码来自 https://github.com/colinvella/EmuNes   他这边的源码功能很完善了的,支持视频录制,手柄,金 ...

  5. java面试一日一题:讲下redo log

    问题:请讲下redo log的作用 分析:mysql中有很多日志,例,binlog undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题? 回答要点: ...

  6. 三维 WebGIS 新玩具:OpenGlobus

    代码仓库地址:https://github.com/openglobus/openglobus 原创.@秋意正寒 目录 1 简介 2 HelloGlobus 3 在 Vite 中与 vue3 集成 4 ...

  7. 10.for循环

    for循环 语法: for(初始化; 布尔表达式; 更新) { //代码语句 } 初始化最先执行,可以声明一种类型,可初始化一个或多个循环控制变量,也可以是一个空语句. 布尔值判断,为 true 执行 ...

  8. hdu1261 JAVA

    题意: 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成多少个不同的 ...

  9. Bettercap2.X版本的使用

    目录 Bettercap 安装 ARP欺骗 DNS 欺骗 注入脚本 结合Beef-XSS 替换下载文件 Bettercap 很多人应该都听过或者用过Ettercap,这是Kali下一款优秀的ARP欺骗 ...

  10. Windows XP sp3 系统安装 Windbg 符号文件 Symbols 时微软失去支持的解决方案

    0x01 前言 Windbg 是微软的正宗调试器,在正常的情况下调试一些程序并没有什么问题,但是如果需要调试分析程序的堆栈,或者是一些特殊的功能时则需要微软的符号文件的支持,所以符号文件是非常重要的, ...