无法访问资源/静态文件夹中的文件spring-boot

时间:2019-05-13 13:40:18

标签: file spring-boot kotlin readfile

我在某个位置有一个文件 /resources/static/fcm-admin

它的绝对路径是

/home/jitu/project-name/src/main/resources/static/fcm-admin

我尝试通过以下方式访问此文件

            val file = ResourceUtils.getFile("classpath:fcm-admin")

这给我一个错误 java.io.FileNotFoundException: class path resource [fcm-admin] cannot be resolved to an absolute file path because it does not exist

我试图以各种方式访问​​文件,但是它不起作用。 我只想访问文件fcm-admin,而不给出完整的绝对路径。一切都会有所帮助

编辑:

因此,我可以使用以下代码在本地访问文件-

            val file = ResourceUtils.getFile("classpath:static/fcm-admin")

但是我无法在生产服务器上访问它。而且我正处于例外之下

class path resource [static/fcm-admin] cannot be resolved to an absolute file path because it does not reside in the file system: jar:file:/var/app/current/application.jar!/BOOT-INF/classes!/static/apple-app-site-association

2 个答案:

答案 0 :(得分:1)

  

您忘记在路径中添加静态

val file = ResourceUtils.getFile("classpath:static/fcm-admin")

由于评论而编辑

从Classpath加载文件:

val file = this.javaClass.classLoader.getResource("/static/fcm-admin").file;

使用类加载器加载资源时,资源将从类路径的根目录开始。

答案 1 :(得分:0)

本地服务器可以与ClassPathResource一起使用,但在生产中将失败

要解决生产中的错误,请将代码更改为

import org.springframework.core.io.ResourceLoader;
import java.io.InputStream;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.ByteArrayResource;
import org.apache.commons.io.IOUtils;

@Autowired
private ResourceLoader resourceLoader;

InputStream logoFileStrem = resourceLoader.getResource("classpath:static/images/image.png").getInputStream();

InputStreamSource byteArrayResource = new ByteArrayResource(org.apache.commons.io.IOUtils.toByteArray(logoFileStrem));