У меня есть путь s3 => s3: // [имя корзины] / [ключ]
s3://bn-complete-dev-test/1234567890/renders/Irradiance_A.png
и мне нужно получить bucket_name и ключ отдельно:
var s3PathParsed = parseS3Path("s3://bn-complete-dev-test/1234567890/renders/Irradiance_A.png");
s3PathParsed.BucketName == "bn-complete-dev-test"
s3PathParsed.Key == "1234567890/renders/Irradiance_A.png"
как правильно разобрать с помощью AWS SDK ?
1) Я выполняю синтаксический анализ вручную (с помощью регулярного выражения), и работает нормально, но мне не комфортно :
public class S3Path : IS3Path
{
private const string _s3PathRegex = @"[s|S]3:\/\/(?<bucket>[^\/]*)\/(?<key>.*)";
public S3Path(string s3Path)
{
Path = s3Path;
var rx = new Regex(_s3PathRegex).Match(s3Path);
if (!rx.Success || rx.Groups.Count != 3)
throw new Exception($"the S3 Path '{s3Path}' is wrong.");
BucketName = rx.Groups[1].Value;
Key = rx.Groups[2].Value;
}
public string Path { get; }
public string BucketName { get; }
public string Key { get; }
}
2) Я использовал AmazonS3Uri из AWWSDK.S3:
string GetBucketNameFromS3Uri(string s3Uri)
{
return new AmazonS3Uri(s3Uri).Bucket;
}
Я назвал метод:
GetBucketNameFromS3Uri("s3://sunsite-complete-dev-test/1234567890/renders/Irradiance_A.png");
и у меня следующая ошибка:
System.ArgumentException: 'Неверный S3 URI - имя хоста не является допустимой конечной точкой S3'
3) Также я стараюсь
string GetBucketNameFromS3Uri(string s3Uri)
{
return new AmazonS3Uri(new Uri(s3Uri)).Bucket;
}
с той же ошибкой.
Я создал новую тему на форуме AWS с этой проблемой: https://forums.aws.amazon.com/thread.jspa?threadID=304401