上传到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();
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。