java下载网络图片文件,并获取其图片类型

业务场景:业务后台编辑资讯时候,从其他网页直接复制内容的时候,复制图片,部分图片由于前端跨域问题,无法展示,而且没法上传到本公司的资源文件服务;故需要后台下载图片资源文件,然后再进行上传本公司资源文件服务,再返回前端问题:由于网络上的图片路径各式各样,不能单纯通过外链接的后缀来判断图片的类型,如:https://hbimg.huabanimg.com/ff4aceaad9a05333b3e46579d991eecdcffb45f612951-T6WWCx_fw658/format/webp 、h
摘要由CSDN通过智能技术生成

业务场景:

业务后台编辑资讯时候,从其他网页直接复制内容的时候,复制图片,部分图片由于前端跨域问题,无法展示,而且没法上传到本公司的资源文件服务;故需要后台下载图片资源文件,然后再进行上传本公司资源文件服务,再返回前端

问题:

由于网络上的图片路径各式各样,不能单纯通过外链接的后缀来判断图片的类型,如:https://hbimg.huabanimg.com/ff4aceaad9a05333b3e46579d991eecdcffb45f612951-T6WWCx_fw658/format/webphttps://res.cloudinary.com/dfb5w2ccj/image/upload/v1585064831/blog/4_dcftnc.webphttp://tnaot-test.oss-cn-hongkong.aliyuncs.com/image/2021/02/24/9a2bab3ff43d4e13a62c7f8335645564.jpg等,可以看出图片文件链接的各式各样,根本没有办法判断是什么图片类型

解决方案:

  • 把图片文件下载,如有明显的图片后缀则下载为该类型文件,若没有明显图片后缀则统一下载为jpg
  • 进行媒体文件类型进行判断是什么图片文件
  • 修改图片文件的名字为正确的文件类型

代码:

1.下载文件

public static File exLinkToFile(String exLink) throws IOException {
    URL uri = new URL(exLink);
    URLConnection connection = uri.openConnection();
    //统一格式处理:除gif、png、jpeg、bmp外,均处理成jpg
    String suffix = "jpg";
    if (exLink.contains(".gif")) {
        suffix = "gif";
    }
    if (exLink.contains(".png")) {
        suffix = "png";
    }
    if (exLink.contains(".jpeg")) {
        suffix = "jpeg";
    }
    if (exLink.contains(".bmp")) {
        suffix = "bmp";
    }
    File origFile = FileUtils.createTempFile(suffix);
    try (InputStream inputStream = connection.getInputStream()) {
        Files.copy(inputStream, origFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
        UploadExUtil.uploadFail();
    }
    if (!origFile.exists() || !origFile.isFile()) {
        throw new IOException("origFile文件创建失败:" + exLink);
    }
    return origFile;
}

 

2.媒体文件类型判断

public class MimeTypeUtils {

    private static boolean isBMP(byte[] buf){
        byte[] markBuf = "BM".getBytes();  //BMP图片文件的前两个字节
        return compare(buf, markBuf);
    }

    private static boolean isICON(byte[] buf) {
        byte[] markBuf = {0, 0, 1, 0, 1, 0, 32, 32};
        return compare(buf, markBuf);
    }
    private static boolean isWEBP(byte[] buf) {
        byte[] markBuf = "RIFF".getBytes(); //WebP图片识别符
        return compare(buf, markBuf);
    }

    private static boolean isGIF(byte[] buf) {

        byte[] markBuf = &
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值