AWS SDK .NET — CopyObject завершается с ошибкой: «Заголовок x-amz-tagged-directive со значением REPLACE не реализован»C#

Место общения программистов C#
Ответить
Anonymous
 AWS SDK .NET — CopyObject завершается с ошибкой: «Заголовок x-amz-tagged-directive со значением REPLACE не реализован»

Сообщение Anonymous »

Я пытаюсь переименовать объект в S3-совместимом хранилище, скопировав его в новый ключ, а затем удалив старый в Cloud Flare R2.
Я использую AWSSDK.S3 (4.0.13.1)
Но я столкнулся с этой ошибкой:
AWS SDK .NET — CopyObject завершается с ошибкой «Заголовок» 'x-amz-tagged-directive' со значением 'REPLACE' не реализована"
Вот соответствующая часть кода:
private (bool success, string error) RenameHotelImageS3(HotelImageStorageLocation config, int propertyId, string oldLink, string newFileName)
{
if (config == null) return (false, "S3 config is null");
if (string.IsNullOrWhiteSpace(oldLink)) return (false, "Old link is empty");
if (string.IsNullOrWhiteSpace(newFileName)) return (false, "New filename is empty");

try
{
var client = new AmazonS3Client(config.S3.AccessKey, config.S3.SecretKey, new AmazonS3Config
{
ServiceURL = config.S3.Url,
ForcePathStyle = true
});

string oldFileName;
try
{
var uri = new Uri(oldLink);
oldFileName = Path.GetFileName(uri.LocalPath);
}
catch
{
oldFileName = Path.GetFileName(oldLink);
}

if (string.IsNullOrWhiteSpace(oldFileName))
return (false, "Invalid old file name from link");

var sourceKey = $"{config.S3.RootPathName}/{propertyId}/{oldFileName}";
var destinationKey = $"{config.S3.RootPathName}/{propertyId}/{newFileName}";

var getRequest = new GetObjectMetadataRequest
{
BucketName = config.S3.Bucket,
Key = sourceKey
};

try
{
client.GetObjectMetadata(getRequest);
}
catch (AmazonS3Exception ex)
{
if (ex.StatusCode == HttpStatusCode.NotFound)
return (false, $"Source file not found: {sourceKey}");
}

var copyRequest = new CopyObjectRequest
{
SourceBucket = config.S3.Bucket,
SourceKey = sourceKey,
DestinationBucket = config.S3.Bucket,
DestinationKey = destinationKey,
CannedACL = S3CannedACL.PublicRead,
ChecksumAlgorithm = ChecksumAlgorithm.SHA256,
TaggingDirective = TaggingDirective.REPLACE
};

var copyResponse = client.CopyObject(copyRequest);

if (copyResponse.HttpStatusCode != HttpStatusCode.OK &&
copyResponse.HttpStatusCode != HttpStatusCode.Created &&
copyResponse.HttpStatusCode != HttpStatusCode.Accepted)
{
return (false, $"Copy failed: {copyResponse.HttpStatusCode}");
}

var deleteRequest = new DeleteObjectRequest
{
BucketName = config.S3.Bucket,
Key = sourceKey
};

client.DeleteObject(deleteRequest);

return (true, "");
}
catch (AmazonS3Exception s3Ex)
{
return (false, $"S3 error: {s3Ex.Message} (Status: {s3Ex.StatusCode}, ErrorCode: {s3Ex.ErrorCode})");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -with-valu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»