← Cloudflare R2 / r2 / examples / aws
aws-sdk-net
Вы должны создать ключ доступа перед началом работы. Во всех примерах используется access_key_id и access_key_secret переменные, которые представляют Access Key ID и Secret Access Key значения, которые вы создали.
В этом примере используется версия 3 aws-sdk-net ↗ пакет. При создании экземпляра необходимо передать учетные данные конфигурации R2 для вашего S3 клиент службы:
Настройка клиента
В этом примере вы явно передадите учётные данные в IAmazonS3 инициализация. При желании используйте общий файл учётных данных AWS или хранилище SDK, как это принято в других AWS SDK. См. Настройка учётных данных AWS ↗ для дополнительных сведений.
private static IAmazonS3 s3Client;
public static void Main(string[] args)
{
// Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens)
var accessKey = "<ACCESS_KEY_ID>";
var secretKey = "<SECRET_ACCESS_KEY>";
var credentials = new BasicAWSCredentials(accessKey, secretKey);
s3Client = new AmazonS3Client(credentials, new AmazonS3Config
{
// Provide your Cloudflare account ID
ServiceURL = "https://<ACCOUNT_ID>.r2.cloudflarestorage.com",
});
}Список бакетов и объектов
ListBucketsAsync ↗ и ListObjectsAsync ↗ методы можно использовать для получения списка бакетов в вашем аккаунте и содержимого этих бакетов соответственно.
static async Task ListBuckets()
{
var response = await s3Client.ListBucketsAsync();
foreach (var s3Bucket in response.Buckets)
{
Console.WriteLine("{0}", s3Bucket.BucketName);
}
}sdk-example
my-bucketstatic async Task ListObjectsV2()
{
var request = new ListObjectsV2Request
{
BucketName = "my-bucket"
};
var response = await s3Client.ListObjectsV2Async(request);
foreach (var s3Object in response.S3Objects)
{
Console.WriteLine("{0}", s3Object.Key);
}
}dog.png
cat.pngЗагрузка и получение объектов
PutObjectAsync ↗ и GetObjectAsync ↗ методы можно использовать для загрузки объектов и скачивания объектов из бакета R2 соответственно.
static async Task PutObject()
{
var request = new PutObjectRequest
{
FilePath = @"/path/file.txt",
BucketName = "my-bucket",
DisablePayloadSigning = true,
DisableDefaultChecksumValidation = true
};
var response = await s3Client.PutObjectAsync(request);
Console.WriteLine("ETag: {0}", response.ETag);
}ETag: "186a71ee365d9686c3b98b6976e1f196"static async Task GetObject()
{
var bucket = "my-bucket";
var key = "file.txt";
var response = await s3Client.GetObjectAsync(bucket, key);
Console.WriteLine("ETag: {0}", response.ETag);
}ETag: "186a71ee365d9686c3b98b6976e1f196"Создание presigned URL
GetPreSignedURL ↗ метод позволяет подписать запрос заранее, предоставив временный доступ к конкретной операции. В данном случае предварительное подписание PutObject запрос для sdk-example/file.txt.
static string? GeneratePresignedUrl()
{
AWSConfigsS3.UseSignatureVersion4 = true;
var presign = new GetPreSignedUrlRequest
{
BucketName = "my-bucket",
Key = "file.txt",
Verb = HttpVerb.GET,
Expires = DateTime.Now.AddDays(7),
};
var presignedUrl = s3Client.GetPreSignedURL(presign);
Console.WriteLine(presignedUrl);
return presignedUrl;
}https://<ACCOUNT_ID>.r2.cloudflarestorage.com/my-bucket/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credential>&X-Amz-Date=<timestamp>&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>