2

まったく同じキーに新しいメタデータを使用してコピーを実行することにより、s3 ストレージ内の既存のすべてのファイルに Cache-Control ヘッダーを設定しようとしています。x-amz-metadata-directive: REPLACEこれは、ヘッダーを介して s3 API によってサポートされています。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 ヘッダーが途中でドロップされている可能性がありますか?

4

1 に答える 1

2

最新のATMOS Programmer's Guide、バージョン 2.3.0、表 11 および 12 によると、オブジェクトの COPY がサポートされていない、またはサポートされていることは何も指定されていません。

私はかなり長い間 ATMOS を使用してきましたが、S3 のコピー機能は、ATMOS オブジェクトのバージョン管理 (76 ページ) を使用して、何らかの形で内部的に一連のコマンドに変換されていると考えています。そのため、Amazon のコピー操作を「バージョンの作成」に変換してから、「古い参照オブジェクトの削除または切り捨て」に変換する場合があります。たぶん私は完全に間違っているかもしれません (私は EMC で働いていないので :-)) そして、彼らはそれを別の方法で処理します... しかし、ネイティブ ATMOS API のドキュメントを読むと、それがわかりました。

試してみることができること: ネイティブの ATMOS API を使用し (これは少し面倒ですが、わかります)、元のオブジェクトのバージョンを作成し (76 ページ)、そのバージョンのメタデータを更新します (ユーザー メタデータ、 12 ページ)、バージョンを最上位オブジェクトに復元します (131 ページ)。その後、メタデータが S3 API で正しく返されるかどうかを確認します。

それが私の2セントです。そのような解決策を試すことにした場合は、うまくいった場合はここに投稿してください。

于 2016-10-28T00:04:26.647 に答える