Chr*_*mer 5 java amazon-s3 amazon-web-services
我将文件上传到S3时尝试设置content-MD5值。我可以看到md5哈希字符串,并将其传递到其中,metadata.setContentMD5()但是在文件上传之后,我在Web控制台中看不到该值,也无法通过Java代码检索到它。
我开始认为我可能误解了MD5内容获取/设置方法的目标。它们是否用于让aws服务器验证接收到的文件内容与我发送的内容一致?如果是这种情况,那么我应该在上setContentMD5(my_md5)载时发送一个with值,但是getETag()当我稍后尝试从S3下载该对象时,是否应该将该值与计算出的md5十六进制字符串进行比较?
在尝试设置此md5值时我做错了吗?
String access_key = "myaccesskey";
String secret_key = "mysecretkey";
String bucket_name = "mybucketname";
String destination_key = "md5_test.txt";
String file_path = "C:\\my-text-file.txt";
BasicAWSCredentials creds = new BasicAWSCredentials(access_key, secret_key);
AmazonS3Client client = new AmazonS3Client(creds);
client.setRegion(RegionUtils.getRegion("us-east-1"));
File file = new File(file_path);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
metadata.setContentLength(file.length());
FileInputStream fis = new FileInputStream(file);
byte[] content_bytes = IOUtils.toByteArray(fis);
String md5 = new String(Base64.encodeBase64(DigestUtils.md5(content_bytes)));
metadata.setContentMD5(md5);
PutObjectRequest req = new PutObjectRequest(bucket_name, destination_key, file).withMetadata(metadata);
PutObjectResult result = client.putObject(req);
GetObjectMetadataRequest mreq = new GetObjectMetadataRequest(bucket_name, destination_key);
ObjectMetadata retrieved_metadata = client.getObjectMetadata(mreq);
// I think I expected getContentMD5 below to show the string I passed in
// during the upload, but the below prints "md5:null"
System.out.println("md5:" + retrieved_metadata.getContentMD5());
Run Code Online (Sandbox Code Playgroud)
我是否错误地计算了MD5字符串?如果我传入一个随机字符串,则会收到一条错误消息,因此S3似乎对我通过上述代码发送的内容感到满意。如果MD5字符串正确,为什么以后使用该client.getContentMD5()方法时仍无法检索呢?我知道ETag应该是MD5十六进制字符串,并且我也可以为上传的文件计算得出(并获得S3计算的相同字符串),所以我不应该期望getContentMD5()遇到这种情况下载文件的值?
小智 5
我认为你是对的:getContentMD5()只是setContentMD5() 1的相应吸气剂。它告诉您请求的被调用方认为 MD5 哈希是什么。如果您想知道 AWS 认为哈希是什么,您应该使用 ETag。
获取内容MD5
该字段表示在调用方计算的对象内容的 base64 编码的 128 位 MD5 摘要摘要。ETag 元数据字段表示由 Amazon S3 计算的十六进制编码的 128 位 MD5 摘要。
返回: 关联对象的内容的 base64 编码 MD5 哈希。如果尚未设置内容的 MD5 哈希值,则返回 null。
最后一部分可能意味着:除非您之前调用过,否则返回 nullsetContentMD5()
| 归档时间: |
|
| 查看次数: |
4138 次 |
| 最近记录: |