Я пытаюсь переименовать объект в 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
AWS SDK .NET — CopyObject завершается с ошибкой: «Заголовок x-amz-tagged-directive со значением REPLACE не реализован» ⇐ C#
Место общения программистов C#
1764495475
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79833795/aws-sdk-net-copyobject-fails-with-header-x-amz-tagging-directive-with-valu[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия