INTEGRITY Документация

S3

R2 поддерживает S3-совместимый API, а значит вы можете использовать любой SDK, библиотеку или инструмент S3 для работы с бакетами. Если у вас уже есть код, который работает с S3, вы можете использовать его с R2, изменив URL конечной точки.

1. Создать бакет

Бакет хранит ваши объекты в R2. Чтобы создать новый бакет R2:

  1. Войдите в свою учётную запись Cloudflare:

    npx wrangler login
  2. Создайте бакет с именем my-bucket:

    npx wrangler r2 bucket create my-bucket

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

  3. Убедитесь, что бакет создан:

    npx wrangler r2 bucket list
  1. В панели управления Cloudflare перейдите в Объектное хранилище R2.

    Перейдите в Обзор ↗
  2. Выберите Создание бакета.

  3. Введите имя своего бакета.

  4. Выберите расположение для вашего бакета и класс хранения по умолчанию.

  5. Выберите Создание бакета.

2. Сгенерировать учётные данные API

Чтобы использовать S3 API, нужно создать учётные данные и получите Access Key ID и Secret Access Key:

  1. Перейдите в Cloudflare Dashboard.
  2. Выберите Storage & databases > R2 > Overview.
  3. Выберите Управление в разделе API Tokens.
  4. Выберите Создание Account API token или Создание User API token
  5. Выберите Object Read & Write разрешение и Применить только к отдельным бакетам чтобы выбрать бакеты, к которым вы хотите получить доступ.
  6. Выберите Создать API-токен.
  7. Скопируйте Access Key ID и Secret Access Key. Храните их в надёжном месте, так как повторно просмотреть секрет будет невозможно.

Также потребуется URL конечной точки S3 API. Его можно найти внизу страницы подтверждения после создания токена на экране Create API Token, либо на странице R2 Overview:

https://<ACCOUNT_ID>.r2.cloudflarestorage.com

3. Использовать AWS SDK

В следующих примерах показано, как использовать SDK для Python и JavaScript. Для других языков см. Примеры S3-совместимых SDK для Go, Java, PHP, Ruby, а также Rust.

  1. Установка boto3:

    pip install boto3
  2. Создайте тестовый файл для загрузки:

    echo 'Hello, R2!' > myfile.txt
  3. Используйте свои учётные данные, чтобы создать клиент 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']}")
  4. Сохраните это как example.py и запустите его:

    python example.py
    Uploaded myfile.txt
    Downloaded to downloaded.txt
    Object: myfile.txt

См. примеры для boto3 для дополнительных операций.

  1. Установите @aws-sdk/client-s3 пакет:

    npm install @aws-sdk/client-s3
  2. Используйте свои учётные данные, чтобы создать клиент 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),
    );
  3. Сохраните это как example.mjs и запустите его:

    node example.mjs
    Uploaded myfile.txt
    Downloaded: Hello, R2!
    Objects: [ 'myfile.txt' ]

См. Примеры AWS SDK for JavaScript для дополнительных операций.

Следующие шаги

Presigned URLs

Создавайте временные URL для доступа к приватным объектам.

Публичные бакеты

Раздавайте файлы напрямую по HTTP с помощью публичного бакета.

CORS

Настройте CORS для загрузок из браузера.

Жизненный цикл объектов

Настройте правила жизненного цикла для автоматического удаления старых объектов.