Чтобы изменить метаданные существующего Amazon S3 объекта, вам необходимо скопировать объект в себя и предоставить нужные новые метаданные на лету, см. copyObject ( )
По умолчанию все метаданные объекта для исходного объекта копируются в
новый целевой объект, если только метаданные нового объекта в
задан CopyObjectRequest.
Это может быть достигнуто примерно так (фрагмент от макушки, так что будьте осторожны):
AmazonS3 s3 = new AmazonS3Client();
String bucketName = "bucketName ";
String key = "key.txt";
ObjectMetadata newObjectMetadata = new ObjectMetadata();
// ... whatever you desire, e.g.:
newObjectMetadata.setHeader("Expires", "Thu, 21 Mar 2042 08:16:32 GMT");
CopyObjectRequest copyObjectRequest = new CopyObjectRequest()
.WithSourceBucketName(bucketName)
.WithSourceKey(key)
.WithDestinationBucket(bucketName)
.WithDestinationKey(key)
.withNewObjectMetadata(newObjectMetadata);
s3.copyObject(copyObjectRequest);
Обратите внимание на следующие несложные, но важные copyObject () ограничение:
Список контроля доступа (ACL) Amazon S3 не скопирован в новый
объект. Новый объект будет иметь по умолчанию Amazon S3 ACL,
CannedAccessControlList.Private, если он явно не указан в
указанный CopyObjectRequest.
Это , а не учтено в моем фрагменте кода!
Удачи!