8

Amazon の AWS SDK の PHP バージョンを使用しています。Expiresヘッダー付きのファイルがたくさんあります。Cache-controlそのヘッダーを削除し、代わりにヘッダーを追加したい。update_object関数を使用すると、ヘッダーを追加できますが、削除できません。

この質問に対する回答は、ファイルをコピーするときにファイルのメタデータを更新できることを示唆していますが、試してみましたが機能しません。これが私が使用したものです:

$response = $s3->copy_object(
    array(
        'bucket' => $bucket,
        'filename' => $file,
    ),
    array(
        'bucket' => $bucket,
        'filename' => $file2,
    ),
    array(
        'acl' => AmazonS3::ACL_PUBLIC,
        'headers' => array(
            'Content-Type' => 'image/jpeg',
            'Cache-Control' => 'public,max-age=30240000',
        ),
        'meta' => array(
            'x-fake-header' => 'something awesome is happening',
        ),
    )
);

ただし、コピーされたオブジェクトには、元のオブジェクトとまったく同じヘッダーがあります (Expires および Content-Type のみ)。上記のあらゆる組み合わせ (Content-Type、Cache-control、meta などの有無にかかわらず) を試しましたが、同じ結果が得られました。

メタデータをリセットするにはどうすればよいですか?

4

3 に答える 3

6

オブジェクトをそれ自体にコピーすると、実際にはヘッダーが適切に変更されることがわかりました。元のファイルを上書きしないように、テスト目的で2番目のファイルにコピーしていました。

しかし、奇妙な理由で、別のファイルにコピーしてもヘッダーは変更されませんが、同じファイルにコピーすると変更されます。

于 2012-08-07T13:48:21.667 に答える
2

Java では、オブジェクトを同じ場所にコピーできます。ここでは、オブジェクトのコピー中にメタデータはコピーされません。オリジナルのメタデータを取得し、リクエストをコピーするように設定する必要があります。Amazon S3 オブジェクトのメタデータを挿入または更新するには、この方法をお勧めします

ObjectMetadata metadata = amazonS3Client.getObjectMetadata(bucketName, fileKey);
ObjectMetadata metadataCopy = new ObjectMetadata();
metadataCopy.addUserMetadata("yourKey", "updateValue");
metadataCopy.addUserMetadata("otherKey", "newValue");
metadataCopy.addUserMetadata("existingKey", metadata.getUserMetaDataOf("existingValue"));

CopyObjectRequest request = new CopyObjectRequest(bucketName, fileKey, bucketName, fileKey)
      .withSourceBucketName(bucketName)
      .withSourceKey(fileKey)
      .withNewObjectMetadata(metadataCopy);

amazonS3Client.copyObject(request);
于 2015-04-23T05:30:37.457 に答える