2017-02-28 116 views
0

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

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

那么,是不是设置一个版本上传对象的正确方法?

此代码是否会导致2个独立的请求到亚马逊?

如果在调用por.setVersionId(..)时互联网被破坏会怎么样?

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

回答

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。它成功了,但没有任何用处。

要将用户定义的元数据与对象(如发布/版本ID)一起存储,您需要在S3中使用对象元数据(x-amz-meta-*)或新对象标记功能。