Od marca 2018 r. Zmieniono najnowszą wersję pakietu SDK AWS dla .NET Core. Teraz używa programowania asynchronicznego. Wiele sygnatur metody uległo zmianie. Chociaż nadal nie można zmienić metadanych bez rozwiązania kopiowania obiektów, które zasugerował Dan, kod do tego jest taki.
Moim rozwiązaniem jest aktualizacja istniejącego obiektu S3 za pomocą zmodyfikowanych metadanych.
Poniższe działa dla mnie, aby zaktualizować jedną wartość metadanych (na podstawie klucza i nowej wartości). Mam dwie pętle do ustawiania metadane, ale może to być zoptymalizowane, aby tylko jedno:
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);
znajdę dokumentację AWS na temat metadanych bardzo mylące - wzdłuż boku link podasz, znalazłem inny łącze do ich podręcznika użytkownika, gdzie pokazuje, jak dodawać lub usuwać metadane obiektów za pomocą konsoli zarządzania. Jedynym rozwiązaniem tego konfliktu, jaki mogę wymyślić, jest to, że kiedy mówią "nie można modyfikować metadanych obiektu", oznacza to, że nie można zmodyfikować wartości określonego klucza metadanych. jaka jest twoja myśl? http://docs.aws.amazon.com/AmazonS3/latest/UG/EditingtheMetadataofanObject.html – Israel
Może to oznaczać, że nie można modyfikować metadanych za pomocą interfejsu REST, ale można za pomocą konsoli zarządzania? (Za kulisami prawdopodobnie klonowałby i usuwał). – kaifong
Zobacz moje rozwiązanie poniżej, możesz zaktualizować istniejący obiekt S3 i ustawić nowe/zaktualizowane metadane w tym samym czasie. Jest podobny do rozwiązania kopiowania. – robnick