使用自定义版本ID将对象上载到Amazon S3

时间:2017-02-28 11:12:22

标签: java amazon-web-services amazon-s3 aws-sdk

我想将对象上传到亚马逊版本的存储桶(使用Java AWS SDK)并为此对象设置自定义版本(目标是将所有对象设置为同一版本,一次上传)

PutObjectResult por = amazonS3Client.putObject(...);
por.setVersionId("custom_version");

那么,这是将版本设置为上传对象的正确方法吗?

此代码是否导致向亚马逊提出2个单独的请求?

如果在调用por.setVersionId(..)时因特网被破坏怎么办?

如果此方法确实试图在Amazon服务器上设置版本ID,为什么por.setVersionId(..)不会抛出SdkClientException等异常?

1 个答案:

答案 0 :(得分:3)

setVersionId将是SDK库本身在创建对象时用于填充服务返回的versionId的内容,以便在您想知道它是什么时可以检索它。

S3中的版本ID是系统生成的不透明字符串,用于唯一标识对象的特定版本。你无法分配它们。

documentation使用了一些不幸的例子,如" 111111"和" 222222,"它不像真正的版本ID。在页面下方有一个更好的例子,您可以在其中找到:

  

唯一版本ID是随机生成的,Unicode,UTF-8编码,URL就绪,不透明的字符串,最多1024个字节。示例版本ID为3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo.

     

只有Amazon S3会生成版本ID。

     

无法修改它们。

这里没有收到错误,因为所有这个方法都是在上传完成后在本地内存中的PutObjectResult对象中设置versionId。它成功了,但没有用处。

要使用对象(例如release / version-id)存储用户定义的元数据,您需要在S3中使用对象元数据(x-amz-meta-*)或新的对象标记功能。