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

API Workers

Workers позволяют выполнять код на периферии сети. После привязки бакета R2 к Worker вы можете напрямую читать и записывать объекты с помощью API Workers.

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. Создать Worker с привязкой R2

  1. Создайте новый проект Worker:

    npm create cloudflare@latest -- r2-worker

    Когда появится запрос, выберите Пример Hello World и JavaScript (или TypeScript) в качестве шаблона.

  2. Перейдите в каталог проекта:

    cd r2-worker
  3. Добавьте привязку R2 в конфигурационный файл Wrangler. Замените my-bucket с именем вашего бакета:

    {
      "r2_buckets": [
        {
          "binding": "MY_BUCKET",
          "bucket_name": "my-bucket"
        }
      ]
    }
    [[r2_buckets]]
    binding = "MY_BUCKET"
    bucket_name = "my-bucket"
  4. (Необязательно) Если вы используете TypeScript, заново сгенерируйте типы:

    npx wrangler types

3. Чтение и запись объектов

Используйте привязку для работы с бакетом. В этом примере объекты сохраняются и извлекаются на основе пути URL:

src/index.js
export default {
	async fetch(request, env) {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
};
src/index.ts
export default {
	async fetch(request, env): Promise<Response> {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
} satisfies ExportedHandler<Env>;

4. Протестировать и развернуть

  1. Протестируйте Worker локально:

    npx wrangler dev
  2. После запуска dev-сервера проверьте сохранение и получение объектов:

    # Store an object
    curl -X PUT http://localhost:8787/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl http://localhost:8787/my-file.txt
  3. Разверните в продакшене:

    npx wrangler deploy
  4. После развертывания Wrangler выводит URL-адрес вашего Worker (например, https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev). Проверьте сохранение и получение объектов:

    # Store an object
    curl -X PUT https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt

См. Документация Workers R2 API для полного справочника по API.

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

Presigned URLs

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

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

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

CORS

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

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

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