← Cloudflare R2 / r2 / get-started
API Workers
Workers позволяют выполнять код на периферии сети. После привязки бакета R2 к Worker вы можете напрямую читать и записывать объекты с помощью API Workers.
1. Создать бакет
Бакет хранит ваши объекты в R2. Чтобы создать новый бакет R2:
-
Войдите в свою учётную запись Cloudflare:
npx wrangler login -
Создайте бакет с именем
my-bucket:npx wrangler r2 bucket create my-bucketЕсли появится запрос, выберите аккаунт, в котором нужно создать бакет.
-
Убедитесь, что бакет создан:
npx wrangler r2 bucket list
-
В панели управления Cloudflare перейдите в Объектное хранилище R2.
Перейдите в Обзор ↗ -
Выберите Создание бакета.
-
Введите имя своего бакета.
-
Выберите расположение для вашего бакета и класс хранения по умолчанию.
-
Выберите Создание бакета.
2. Создать Worker с привязкой R2
-
Создайте новый проект Worker:
npm create cloudflare@latest -- r2-workerКогда появится запрос, выберите Пример Hello World и JavaScript (или TypeScript) в качестве шаблона.
-
Перейдите в каталог проекта:
cd r2-worker -
Добавьте привязку R2 в конфигурационный файл Wrangler. Замените
my-bucketс именем вашего бакета:{ "r2_buckets": [ { "binding": "MY_BUCKET", "bucket_name": "my-bucket" } ] }[[r2_buckets]] binding = "MY_BUCKET" bucket_name = "my-bucket" -
(Необязательно) Если вы используете TypeScript, заново сгенерируйте типы:
npx wrangler types
3. Чтение и запись объектов
Используйте привязку для работы с бакетом. В этом примере объекты сохраняются и извлекаются на основе пути URL:
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);
},
};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. Протестировать и развернуть
-
Протестируйте Worker локально:
npx wrangler dev -
После запуска 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 -
Разверните в продакшене:
npx wrangler deploy -
После развертывания 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.