R2 Upload — Drag and Drop

Drop any file here. It gets uploaded to R2 via the Worker binding and a public URL is returned. Watch the metadata fly back.

What's about to happen: when you drop a file, your browser sends it to the Worker as multipart form data. The Worker calls env.BUCKET.put(key, file.stream()) — a native R2 binding, no SDK, no signing. R2 returns success, and the file is immediately accessible at a public URL. No CORS dance, no presigned URL flow, no S3 SDK config. Just one line of Worker code.
📁

Drop a file here

Images, PDFs, videos, anything up to 100 MB

— or —
Stored at uploads/<timestamp>-<filename>
Uploading ...

Upload complete

View Gallery → View as JSON Back to demo dashboard