ClassPathResource遇到的坑:class path resource


前言

需求:拿到一个小程序的皮肤文件夹,放在resource目录下
1:根据皮肤的style.json,获取json内的${xxx.png}变量(获的图片名list)
2:将图片上传图片库,用图片id替换变量
3:生成后的style.json放入缓存中

这里记录下:ClassPathResource的使用中遇到的坑
文件目录如下:
在这里插入图片描述


一、使用ClassPathResource.getFile()的坑

        ClassPathResource classPathResource = new ClassPathResource("/skins");
        File file = classPathResource.getFile();
        String[] list = file.list();

这个写法是为了:获取skins文件夹下所有的文件名

本地结果是:
["doodle","standard","skinCode.json"]

坑来了:

本地启动是正常的,但是将项目发到服务器上,报错了:
class path resource [skins] cannot be resolved to absolute file path because it

这是为啥呢?
因为文件在jar包里,直接通过文件资源路径是拿不到文件的。 可以用文件流去获取

二、classPathResource.getInputStream()通过流读取文件内容

json文件转为jsonObject


        ClassPathResource classPathResource = new ClassPathResource("/skins/skinCode.json");
        InputStream inputStream = classPathResource.getInputStream();
        JSONObject json = JSONObject.parseObject(inputStream, JSONObject.class);

图片转为byte[]

        InputStream inputStream = new ClassPathResource(filePath).getInputStream();
        byte[] bytes = IOUtils.toByteArray(inputStream);

如果需要返回文件给前端,也可以通过HttpServletResponse返出去


总结

综上所述:开发过程中使用ClassPathResource时,
不要用: classPathResource.getFile()
要用:classPathResource.getInputStream()

吃了技术差的苦啊

猜你喜欢

转载自blog.csdn.net/qq_37700773/article/details/129207343