一个隐蔽的错误导致上传图片报错

记录下这一个坑:

 

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
 

 

 

猜你喜欢

转载自cfyme.iteye.com/blog/2205508