开发者社区> 问答> 正文

OSSContent-MD5计算方法

上传到OSS的数据时,希望上传的数据做校验,因此用到了OSS 的Content-MD5,发现HTTP的Content-MD5并不是单纯的文件的MD5,是遵循http://tools.ietf.org/html/rfc1864标准。


计算MD5的函数:
  private static String getContentMD5(InputStream fis) throws Exception{
      MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] buffer=new byte[8192];
        int read=0;
        while( (read = fis.read(buffer)) > 0)
                md.update(buffer, 0, read);
        byte[] md5 = md.digest();
    
        return  new String(Base64.encodeBase64(md5));
    }
    
  
    
    public static String bytesToHexString(byte[] src){  
        StringBuilder stringBuilder = new StringBuilder("");  
        if (src == null || src.length <= 0) {  
            return null;  
        }  
        for (int i = 0; i < src.length; i++) {  
            int v = src & 0xFF;  
            String hv = Integer.toHexString(v);  
            if (hv.length() < 2) {  
                stringBuilder.append(0);  
            }  
            stringBuilder.append(hv);  
        }  
        return stringBuilder.toString();  
    }

向OSS 发送PutObject时带上Content-MD5
File file = new File(fileName);
            ObjectMetadata meta = null;
            InputStream content = new FileInputStream(file);
            try{
              // 创建上传 Object 的 Metadata
              meta = new ObjectMetadata();
              // 必须设置 ContentLength
              meta.setContentLength(file.length());
              meta.setContentType("image/jpeg");
              
             String str = getContentMD5(content);
              meta.setHeader("Content-MD5", str);
            
            }finally{
              if(content!=null){
                content.close();
              }
            }
            try{
              content = new FileInputStream(file);
              String key = "111/" + UUID.randomUUID().toString().replaceAll("-", "");
              PutObjectResult result = client.putObject("cn-beijing", key, content, meta);
              // 打印 ETag
              System.out.println(result.getETag());
            }finally{
              if(content!=null){
                content.close();
              }
            }

展开
收起
chinese 2015-04-16 11:15:20 13122 0
2 条回答
写回答
取消 提交回答
  • ReOSSContent-MD5计算方法
    请问一下这个函数 public static String bytesToHexString(byte[] src)是干嘛的???
    2015-05-06 19:48:17
    赞同 展开评论 打赏
  • LT是个伪程序员
    您的帖子很精彩!希望很快能再分享您的下一帖!

    -------------------------

    纯技术贴,手动顶一个。

    2015-04-16 11:23:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载