Setting the file. One moment.
Chapter 04 · Cloudflare Deploy
Subchapter 4.172
references/r2/README.mdMarkdown3 KBView on GitHub
S3-compatible object storage with zero egress fees, optimized for large file storage and delivery.
R2 provides:
Use cases: Media storage, backups, static assets, user uploads, data lakes
wrangler r2 bucket create my-bucket --location=enam
wrangler r2 object put my-bucket/file.txt --file=./local.txt// Upload
await env.MY_BUCKET.put(key, data, {
httpMetadata: { contentType: 'image/jpeg' }
});
// Download
const object = await env.MY_BUCKET.get(key);
if (object) return new Response(object.body);| Method | Purpose | Returns |
|---|---|---|
put(key, value, options?) | Upload object | R2Object | null |
get(key, options?) | Download object | R2ObjectBody | R2Object | null |
head(key) | Get metadata only | R2Object | null |
delete(keys) | Delete object(s) | Promise<void> |
list(options?) | List objects | R2Objects |
R2 integrates with Cloudflare Queues for reactive workflows:
// wrangler.jsonc
{
"event_notifications": [{
"queue": "r2-notifications",
"actions": ["PutObject", "DeleteObject"]
}]
}
// Consumer
async queue(batch: MessageBatch, env: Env) {
for (const message of batch.messages) {
const event = message.body; // { action, bucket, object, timestamps }
if (event.action === 'PutObject') {
// Process upload: thumbnail generation, virus scan, etc.
}
}
}First-time users: README → configuration.md → api.md → patterns.md
Specific tasks: