在docker容器中部署的jar项目,在windows中测试ok,在linux系统的docker容器中,写图片时遇到的异常问题
原代码:
private String upload(String portraitURL){
File file=null;
try {
String imageType = portraitURL.substring(portraitURL.lastIndexOf(".")+1);
String filePath = System.getProperty("user.dir");
String path= filePath+System.currentTimeMillis()+"."+imageType;
log.info("图片地址: {}",path);
BufferedImage read = ImageIO.read(new URL(portraitURL));
file=new File(path);
ImageIO.write(read,imageType,file);
UploadResult image = client.uploadFile(path, "image");
if (Optional.ofNullable(image).isPresent()) {
return image.getMediaId();
}
} catch (IOException e) {
e.printStackTrace();
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}finally {
//使用完毕删除创建临时文件
Optional.ofNullable(file).ifPresent(item ->{
if (item.exists()) {
try {
FileUtils.delete(item);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
throw new RuntimeException("极光上传图片异常");
}
问题解决
private String upload(String portraitURL){
if (StringUtils.isBlank(portraitURL)) {
portraitURL= SysUserConstants.DEFAULT_IMAGE;
}
File file=null;
try {
String imageType = portraitURL.substring(portraitURL.lastIndexOf(".")+1);
String filePath = System.getProperty("user.dir");
String path= filePath+System.currentTimeMillis()+"."+imageType;
log.info("图片地址: {}",path);
BufferedImage read = ImageIO.read(new URL(portraitURL));
file=new File(path);
//如果是jpg或者是jpeg,需要重画一下
if (imageType.equalsIgnoreCase("jpg") || imageType.equalsIgnoreCase("jpeg")) { //重画一下,要么会变色
BufferedImage tag;
tag = new BufferedImage(read.getWidth(), read.getHeight(), BufferedImage.TYPE_INT_BGR);
Graphics g = tag.getGraphics();
g.drawImage(read, 0, 0, null);
g.dispose();
read = tag;
}
ImageIO.write(read,imageType,file);
UploadResult image = client.uploadFile(path, "image");
if (Optional.ofNullable(image).isPresent()) {
return image.getMediaId();
}
} catch (IOException e) {
e.printStackTrace();
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}finally {
//使用完毕删除创建临时文件
Optional.ofNullable(file).ifPresent(item ->{
if (item.exists()) {
try {
FileUtils.delete(item);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
throw new RuntimeException("极光上传图片异常");
}
总结
此处为解决问题核心代码,重画图片
//如果是jpg或者是jpeg,需要重画一下
if (imageType.equalsIgnoreCase("jpg") || imageType.equalsIgnoreCase("jpeg")) { //重画一下
BufferedImage tag;
tag = new BufferedImage(read.getWidth(), read.getHeight(), BufferedImage.TYPE_INT_BGR);
Graphics g = tag.getGraphics();
g.drawImage(read, 0, 0, null); // 绘制缩小后的图
g.dispose();
read = tag;
}



