zoukankan      html  css  js  c++  java
  • SpringBoot项目打包成jar后,使用ClassPathResource获取classpath下文件失败

    SpringBoot项目打包成jar后读取文件的大坑,使用ClassPathResource获取classpath下文件失败

    在项目中使用ClassPathResource中获取资源文件,在本地环境可以正常访问获取到文件,然后打包部署到测试环境后却报错不能找到给资源文件,报错信息如下:

    image-20211227131153028

    解决方法:使用PathMatchingResourcePatternResolver获取资源文件,不使用classPathResource

    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
          org.springframework.core.io.Resource[] resources = resolver.getResources("/static/signature.png");
          InputStream inputStream = resources[0].getInputStream();
    	//file文件转换成MultipartFile文件
          MultipartFile multipartFile = new MockMultipartFile("file", "signature.png", "text/plain", IOUtils.toByteArray(inputStream));
    
    

    原因:

    image-20211227131904968

    因为resourceUrl.getProtocol()不是file,而是 jar,这样就抛出了一个FileNotFoundException异常。

    ResouceUtils.getFile()是专门用来加载非压缩和Jar包文件类型的资源,所以它根本不会去尝试加载Jar中的文件,要想加载Jar中的文件,只要用可以读取jar中文件的方式加载即可,比如 xx.class.getClassLoader().getResouceAsStream()这种以流的形式读取文件的方式,所以使用读取文件流就可以拿到了。

    参考文档:https://www.renfei.net/posts/1003293

  • 相关阅读:
    jQuery Lazy Load 图片延迟加载
    jquery多级联动(ajax查数据库)
    在命令行快速切换目录(转载)
    推荐Mac软件Alfred
    Vim的snipMate插件
    腾讯CMEM的PHP扩展(转载)
    svn hooks使用
    samba基本配置
    linux进程状态详解(转)
    elk systemd管理
  • 原文地址:https://www.cnblogs.com/seanRay/p/15735879.html
Copyright © 2011-2022 走看看