2018年3月の時点で、.NETコア用のAWS SDKの最新バージョンが変更されました。現在、非同期プログラミングを使用しています。メソッドシグネチャの多くは変更されています。 Danが提案したオブジェクトコピーソリューションなしではメタデータを変更することはできませんが、そのためのコードがあります。
私の解決方法は、変更されたメタデータで既存のS3オブジェクトを更新することです。
以下は、(キーと新しい値に基づいて)単一のメタデータ値を更新するために働くものです。私は、メタデータを設定するための2つのループを持っているが、一つだけ持つように最適化することができます:私は非常に混乱したメタデータのトピックに関するAWSのドキュメントを見つける
string fileContents = string.Empty;
Dictionary<string, string> fileMetaData = null;
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = setKeyName
};
var response = await s3Client.GetObjectAsync(request);
// Read the contents of the file
using (var stream = response.ResponseStream)
{
// Get file contents
TextReader tr = new StreamReader(stream);
fileContents = tr.ReadToEnd();
}
// Create the File Metadata collection
fileMetaData = new Dictionary<string, string>();
foreach (string metadataKey in response.Metadata.Keys)
{
fileMetaData.Add(metadataKey, response.Metadata[metadataKey]);
}
// Update the metadata value (key to update, new value)
fileMetaData[metaDataKeyToUpdate] = metaDataNewValue;
// Update the existing S3 object
PutObjectRequest putRequest1 = new PutObjectRequest
{
BucketName = bucketName,
Key = setKeyName,
ContentBody = fileContents
};
// Set the metadata
foreach (string metadataKey in response.Metadata.Keys)
{
putRequest1.Metadata.Add(metadataKey, fileMetaData[metadataKey]);
}
PutObjectResponse response1 = await s3Client.PutObjectAsync(putRequest1);
- あなたが提供してきた側面に沿ってリンクを、私は別のを見つけました管理コンソールを使用してオブジェクトメタデータを追加または削除する方法を示したユーザーガイドへのリンク。 このコンフリクトに対する唯一の解決策は、「オブジェクトメタデータを変更できません」と言うとき、特定のメタデータキーの値を変更できないということです。あなたの考えは何ですか? http://docs.aws.amazon.com/AmazonS3/latest/UG/MetadataofanObject.html – Israel
おそらく、RESTインターフェースを介してメタデータを変更することはできませんが、管理コンソールから行うことができます。 (おそらくクローンして削除するシーンの裏に)。 – kaifong
下記の私の解決策を見て、既存のS3オブジェクトを更新し、新しい/更新されたメタデータを同時に設定することができます。それはコピーソリューションに似ています。 – robnick