← Cloudflare R2 / r2 / get-started
S3
R2 поддерживает S3-совместимый API, а значит вы можете использовать любой SDK, библиотеку или инструмент S3 для работы с бакетами. Если у вас уже есть код, который работает с S3, вы можете использовать его с R2, изменив URL конечной точки.
1. Создать бакет
Бакет хранит ваши объекты в R2. Чтобы создать новый бакет R2:
-
Войдите в свою учётную запись Cloudflare:
npx wrangler login -
Создайте бакет с именем
my-bucket:npx wrangler r2 bucket create my-bucketЕсли появится запрос, выберите аккаунт, в котором нужно создать бакет.
-
Убедитесь, что бакет создан:
npx wrangler r2 bucket list
-
В панели управления Cloudflare перейдите в Объектное хранилище R2.
Перейдите в Обзор ↗ -
Выберите Создание бакета.
-
Введите имя своего бакета.
-
Выберите расположение для вашего бакета и класс хранения по умолчанию.
-
Выберите Создание бакета.
2. Сгенерировать учётные данные API
Чтобы использовать S3 API, нужно создать учётные данные и получите Access Key ID и Secret Access Key:
- Перейдите в Cloudflare Dashboard ↗.
- Выберите Storage & databases > R2 > Overview.
- Выберите Управление в разделе API Tokens.
- Выберите Создание Account API token или Создание User API token
- Выберите Object Read & Write разрешение и Применить только к отдельным бакетам чтобы выбрать бакеты, к которым вы хотите получить доступ.
- Выберите Создать API-токен.
- Скопируйте Access Key ID и Secret Access Key. Храните их в надёжном месте, так как повторно просмотреть секрет будет невозможно.
Также потребуется URL конечной точки S3 API. Его можно найти внизу страницы подтверждения после создания токена на экране Create API Token, либо на странице R2 Overview:
https://<ACCOUNT_ID>.r2.cloudflarestorage.com3. Использовать AWS SDK
В следующих примерах показано, как использовать SDK для Python и JavaScript. Для других языков см. Примеры S3-совместимых SDK для Go, Java, PHP, Ruby, а также Rust.
-
Установка boto3 ↗:
pip install boto3 -
Создайте тестовый файл для загрузки:
echo 'Hello, R2!' > myfile.txt -
Используйте свои учётные данные, чтобы создать клиент S3 и работать с бакетом:
import boto3 s3 = boto3.client( service_name='s3', # Provide your R2 endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com endpoint_url='https://<ACCOUNT_ID>.r2.cloudflarestorage.com', # Provide your R2 Access Key ID and Secret Access Key aws_access_key_id='<ACCESS_KEY_ID>', aws_secret_access_key='<SECRET_ACCESS_KEY>', region_name='auto', # Required by boto3, not used by R2 ) # Upload a file s3.upload_file('myfile.txt', 'my-bucket', 'myfile.txt') print('Uploaded myfile.txt') # Download a file s3.download_file('my-bucket', 'myfile.txt', 'downloaded.txt') print('Downloaded to downloaded.txt') # List objects response = s3.list_objects_v2(Bucket='my-bucket') for obj in response.get('Contents', []): print(f"Object: {obj['Key']}") -
Сохраните это как
example.pyи запустите его:python example.pyUploaded myfile.txt Downloaded to downloaded.txt Object: myfile.txt
См. примеры для boto3 для дополнительных операций.
-
Установите @aws-sdk/client-s3 ↗ пакет:
npm install @aws-sdk/client-s3 -
Используйте свои учётные данные, чтобы создать клиент S3 и работать с бакетом:
import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command, } from "@aws-sdk/client-s3"; const s3 = new S3Client({ region: "auto", // Required by AWS SDK, not used by R2 // Provide your R2 endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com endpoint: "https://<ACCOUNT_ID>.r2.cloudflarestorage.com", credentials: { // Provide your R2 Access Key ID and Secret Access Key accessKeyId: "<ACCESS_KEY_ID>", secretAccessKey: "<SECRET_ACCESS_KEY>", }, }); // Upload a file await s3.send( new PutObjectCommand({ Bucket: "my-bucket", Key: "myfile.txt", Body: "Hello, R2!", }), ); console.log("Uploaded myfile.txt"); // Download a file const response = await s3.send( new GetObjectCommand({ Bucket: "my-bucket", Key: "myfile.txt", }), ); const content = await response.Body.transformToString(); console.log("Downloaded:", content); // List objects const list = await s3.send( new ListObjectsV2Command({ Bucket: "my-bucket", }), ); console.log( "Objects:", list.Contents.map((obj) => obj.Key), ); -
Сохраните это как
example.mjsи запустите его:node example.mjsUploaded myfile.txt Downloaded: Hello, R2! Objects: [ 'myfile.txt' ]
См. Примеры AWS SDK for JavaScript для дополнительных операций.