27、关于附件缩略图遇到的问题

在最近的项目中,涉及到了附件下载,从影像系统下载附件到本地目录,存储格式自定义(这里就遇到了问题,定义为txt文件导致某些api不能识别文件)。
在我写的浏览附件的接口,支持浏览缩略图以及浏览全图。
现象(问题描述)
BufferedImage prevImage = ImageIO.read(inputStream) 调试跟进去发现prevImage = null,可是输入流是好好的,而且输入流对应的图片也能打开,但 ImageIO.read返回就是null

解决过程
后来在网上查找ImageIO用法知道,它可读取的图片类型是有限制的,可以读取图片的格式为:[BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
可是文件后缀是jpg格式,按道理说应该支持啊,后来将文件下载下来放到notepad++上查看才发现前缀是:RIFF? WEBPVP8 这说明该文件的实际格式是webp格式.文件后缀名有时候不是实际的文件格式.

最后解决方案
因为我的业务只支持特定格式的文件,在ImageIo支持读取的图片格式范围内,因此,当读取到null时,直接提示用户上传图片格式有误即可.

本地代码:

    /**
     * 支持转化为缩略图的文件
     */
    private static final   String[] SUPPORT_IMG_TYPE={"BMP", "bmp", "jpg", "JPG", "wbmp", "jpeg", "png", "PNG", "JPEG", "WBMP", "GIF", "gif"};


/**
自定义图片尺寸(缩略图)
*/
private byte[] reSizeImg(File showFile, String formatName){
        ByteArrayOutputStream bos=null;

        if(!checkImgType(formatName)){
            throw new RuntimeException("不支持的图片格式!");
        }
        try{
            bos=new ByteArrayOutputStream();
            Image img= ImageIO.read(showFile);
            BufferedImage bufferedImage=new BufferedImage(70,
                    70,BufferedImage.TYPE_INT_RGB);
            Graphics g=bufferedImage.getGraphics();
            g.drawImage(img,0,0,70,70,null);
            ImageIO.write(bufferedImage,formatName,bos);
            return bos.toByteArray();
        }catch (IOException e){
            throw new RuntimeException("图片读取异常");
        }
    }

/**
     * 判断格式是否支持
     * @param formatName
     * @return
     */
    private  boolean checkImgType(String formatName){
        for(int i=0;i<SUPPORT_IMG_TYPE.length;i++){
            if(SUPPORT_IMG_TYPE[i].equals(formatName)){
                return true;
            }
        }
        return false;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值