我想将对象上传到亚马逊版本的存储桶(使用Java AWS SDK)并为此对象设置自定义版本(目标是将所有对象设置为同一版本,一次上传)
PutObjectResult por = amazonS3Client.putObject(...);
por.setVersionId("custom_version");
那么,这是将版本设置为上传对象的正确方法吗?
此代码是否导致向亚马逊提出2个单独的请求?
如果在调用por.setVersionId(..)时因特网被破坏怎么办?
如果此方法确实试图在Amazon服务器上设置版本ID,为什么por.setVersionId(..)不会抛出SdkClientException等异常?
答案 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-*
)或新的对象标记功能。