java: read image file from resources within jar

pre

public Boolean uploadAvatarByDefaultImage(AccountEntity user) {
        ResponseBody responseInfo = null;
        try {
            String index=user.getExtensionLink()[0].getExtension().substring(2);
            File photo = new File("./avatar/"+index+".png");
            String name = "image";
            String fileName = "user_avatar.png";
            String mediaType = "image/png";
            BufferedImage bufferedImage = ImageIO.read(photo);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, "png", bos);
            byte[] fileContent = bos.toByteArray();
            ## responseInfo = setting avatar function ##
            return responseInfo.contentLength() == (-1);

        } catch (NoSuchFileException e) {
            logger.error("not avatar file", e);
        } catch (IOException | RestException e) {
            logger.error("failed to upload avatar", e);
        } finally {
            if (responseInfo != null) {
                responseInfo.close();
            }
        }
        return false;
    }

很早以前實現(xiàn)的一個用來更新賬號頭像的方法,當時沒有注意在docker跑的時候會失敗
問題點在于以前是直接去load一個文件,但是在docker跑的時候,已經(jīng)打包成一個jar包,直接load是沒辦法去獲取的
把圖片文件放在resources目錄下,就可以使用java的load resources的方法去讀取文件
網(wǎng)上給的方法是

1. BufferedImage im = ImageIO.read(new File(getClass().getResource(fileName).toURI()));
這種方法沒辦法讀取到文件
2. BufferedImage buff =ImageIO.read(getClass().getResourceAsStream(fileName));
這種方法是OK的

也可以使用java封裝好的類ClassPathResource

ClassPathResource resource = new ClassPathResource(pngPath);

filePath: /avatar 即可


圖片位置

after

public Boolean uploadAvatarByDefaultImage(AccountEntity user) {
        ResponseBody responseInfo = null;
        try {
            String index=user.getExtensionLink()[0].getExtension().substring(2);
            String name = "image";
            String fileName = "user_avatar.png";
            String mediaType = "image/png";
            String pngPath = "/avatar/" + index + ".png"; 
            ClassPathResource resource = new ClassPathResource(pngPath);
            BufferedImage bufferedImage = ImageIO.read(resource.getInputStream());
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, "png", bos);
            byte[] fileContent = bos.toByteArray();
           ## responseInfo = setting avatar function ##
            bos.close(); #只要是stream類型都需要close
            return responseInfo.contentLength() == (-1);

        } catch (NoSuchFileException e) {
            logger.error("not avatar file", e);
        } catch (IOException | RestException e) {
            logger.error("failed to upload avatar", e);
        } finally {
            if (responseInfo != null) {
                responseInfo.close();
            }
        }
        return false;
    }
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容