OSSContent-MD5计算方法-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

OSSContent-MD5计算方法

chinese 2015-04-16 11:15:20 11875
上传到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();
              }
            }
云服务器登录 云服务器设置
分享到
取消 提交回答
全部回答(2)
  • zhangty
    2015-05-06 19:48:17
    ReOSSContent-MD5计算方法
    请问一下这个函数 public static String bytesToHexString(byte[] src)是干嘛的???
    0 0
  • 千鸟
    2015-04-16 11:23:33
    您的帖子很精彩!希望很快能再分享您的下一帖!

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

    纯技术贴,手动顶一个。

    0 0
添加回答
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

相似问题
最新问题