记录一次阿里云OSS下载文件上传到FTP校验文件完整性

因为阿里云上传是统一接口我没办法更改,故将验证加到了文件上传完FTP之后再去验证,结果。。。结果。。。搞了三天依旧没搞定,掉头发啊,这还怎么玩,无奈,求救度娘吧,各种查阅,各种尝试,然并卵,OSS返回的流文件和FTP获取的流文件一直不一样,这。。。挠破头皮也想不到怎么肥事啊,想到快要交差了,紧张。。。再百度,茅塞顿开,输入流在第二次使用的时候会失效,也就是说只能用一次,那次已经用在了上传FTP上,那如果把流存起来,这样不就可以一直去使用了,于是,就找了一个方法如下:

/**
     * 保存流对象(输入流在第二次使用的时候会失效)
     * 在需要用到InputStream的地方再封装成InputStream
     * ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buf);
     * Workbook wb = new HSSFWorkbook(byteArrayInputStream);//byteArrayInputStream 继承了InputStream,故这样用并没有问题
     * 如果只需要用到一次inputstream流,就不用这样啦,直接用就OK
     * @param ins
     */
    public byte[] saveaIns(InputStream ins){
        byte[] buf = null;
        try {
            if(ins!=null){
                buf = org.apache.commons.io.IOUtils.toByteArray(ins);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buf;
    }

这样,用的时候再new ByteArrayInputStream(buf)转成InputStream就可以无限次使用了。

/**
     * 比较文件是否相同
     * @param inputStream1 OSS流文件
     * @param inputStream2	FTP流文件
     * @return
     */
    public static boolean fileEqualsMD5(InputStream inputStream1, InputStream inputStream2) {
        boolean result = true;
        try {
            String fileDigest1 = DigestUtils.md5DigestAsHex(inputStream1);
            String fileDigest2 = DigestUtils.md5DigestAsHex(inputStream2);
            // 都为空也算不同文件
            if (fileDigest1 == null || !fileDigest1.equals(fileDigest2)) {
                result = false;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值