记录下这一个坑:
rose后台管理系统突然上传不了图片
前几天都是好好的,为什么突然就不行了呢?
下面是服务日志保存信息:

这张图片是可以正常打开的,
测试环境都是可以正常上传图片的,难道是服务器不能打开这张图片。
登陆到服务器运行:
curl http://img03.taobaocdn.com/imgextra/i4/138216051/TB2PioecpXXXXXZXpXXXXXXXXXX_!!138216051.png
是有信息可以打印出来的,说明服务器是可以访问该图片的。
一时办法也想不到解决方案
看代码好像也找不到什么BUG.
为了最快给运营人员使用, 那就去重启下tomcat看看有没有效果吧,服务器去运行下重启的命令:
sudo service tomcat_rose restart
重启完成后,可以正常上传图片了
重启就能解决问题,这么奇怪的问题,那就仔细去查看下代码,因为是后台系统运行了一段时间才出现的问题,怀疑是不是什么流没有关闭,仔细查看,果然如此,是关闭流的地方代码写错了,原来的代码如下:
public static BufferedImage getBufferedImage(String imgUrl) throws Exception {
URL url = null;
InputStream is = null;
BufferedImage img = null;
try {
url = new URL(imgUrl);
is = url.openStream();
img = ImageIO.read(is);
} catch (Exception e) {
throw new Exception("图片不存在 url=" + imgUrl);
} finally {
try {
if (null != is) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return img;
}
原来关闭流的判断 写错了 (null != img) 正确的应该是 (null! = is)
这个错误好隐蔽,线上只有运行一段时间才会有问题。
总结:遇到问题,一时找不到办法,重启也许是一大法宝。然后逐步排查问题,才能高效率的解决各种意想不到的bug
本文记录了一个关于图片上传失败的问题及解决过程。通过分析日志、测试服务器访问能力,并最终定位到图片流关闭逻辑错误,成功修复了问题。
1048

被折叠的 条评论
为什么被折叠?



