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;
}