すべてのAmazonS3のクラウドファイルのキャッシュコントロールヘッダーを更新する必要があります。ただし、jclouds APIを使用してそれをどのように行うかはわかりません。 Apache jcloudsプラグインを使用しています。そして、私は2つの関連する答えを得ました:
最初の答えは、grailsのjcloudプラグインでは利用できないSwiftKey Apiクラスを使用することです。 2番目の答えは、AWS Java sdkを使用することです。このSDKには、既にgrailsラッピングプラグインがあります https://grails.org/plugin/aws-sdk しかし、メタデータの更新はサポートしていません。
オブジェクトのコピーを実行してメタデータを変更することができます( Amazon S3 SDKを使用してメタデータを更新する方法 を参照):
ObjectMetadata metadataCopy = new ObjectMetadata();
// copy previous metadata
metadataCopy.addUserMetadata("newmetadata", "newmetadatavalue");
CopyObjectRequest request = new CopyObjectRequest(bucketName, existingKey, bucketName, existingKey)
.withNewObjectMetadata(metadataCopy);
amazonS3Client.copyObject(request);
これが哲学的に「更新」であるかどうかは、あなたが決めることです。
できません:
各Amazon S3オブジェクトには、データ、キー、メタデータがあります。オブジェクトキー(またはキー名)は、バケット内のオブジェクトを一意に識別します。オブジェクトメタデータは、名前と値のペアのセットです。オブジェクトのメタデータは、アップロード時に設定できます。 オブジェクトをアップロードした後、オブジェクトのメタデータを変更することはできません。オブジェクトのメタデータを変更する唯一の方法は、オブジェクトのコピーを作成してメタデータを設定することです。
http://docs.aws.Amazon.com/AmazonS3/latest/dev/UsingMetadata.html
PHPの例
この質問はPHP固有のものではありませんが、Googleでの最高の結果であるため、誰かを助けるかもしれません。
これにより、既存のオブジェクトが上書きされます。
$client = new \Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => 'BUCKET-REGION'
]);
$updateResponse = $client->copyObject([
'Key' => 'OBJECTKEY',
'Bucket' => 'MYBUCKET',
'CopySource' => 'MYBUCKET/OBJECTKEY',
'MetadataDirective' => 'REPLACE',
'Metadata' => [
'width' => 441,
'height' => 189
]
]);