我正在尝试通过执行复制到完全相同的密钥但使用新元数据来在 s3 存储中的所有现有文件上设置缓存控制标头。s3 api 通过x-amz-metadata-directive: REPLACE
Header 支持这一点。在https://docs.developer.swisscom.com/service-offerings/dynamic.html#s3-api的 s3 api 兼容性文档中,对象复制方法既未列为受支持也未列为受支持。
副本本身可以正常工作(到另一个键),但是设置新元数据的选项似乎不适用于复制到相同或不同的键。ATMOS s3 兼容的 API 是否不支持这一点和/或是否有任何其他方式来更新元数据而无需读取所有内容并将其写回存储?
我目前正在使用 Amazon Java SDK (v. 1.10.75.1) 进行调用。
更新:
经过更多测试后,我遇到的问题似乎更加具体。该副本有效,我可以成功更改其他元数据,例如 Content-Disposition 或 Content-Type。只是 Cache-Control 被忽略。
这里要求的是我用来拨打电话的代码:
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, sharedsecret);
AmazonS3 amazonS3 = new AmazonS3Client(awsCreds);
amazonS3.setEndpoint(endPoint);
ObjectMetadata metadata = amazonS3.getObjectMetadata(bucketName, storageKey).clone();
metadata.setCacheControl("private, max-age=31536000");
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, storageKey, bucketName, storageKey).withNewObjectMetadata(metadata);
amazonS3.copyObject(copyObjectRequest);
也许对 API 的 PUT(复制)请求上的 Cache-Control 标头在途中被丢弃了?