Object Storage for Builders
Saving uploaded files to your server's local disk works fine in development and fails the first time you redeploy, scale to a second instance, or actually need the durability guarantees a real storage provider gives you. This course teaches you how object storage actually works — buckets, keys, the S3 API that most providers now share — how to upload and serve files correctly, how to avoid the egress fees that quietly inflate a bill, how to lock down access so a bucket is never accidentally public, and how to choose between Amazon S3, Cloudflare R2, Backblaze B2, and the rest. By the end you will have real files flowing through a real bucket, served correctly and priced predictably.
What you'll learn
Course outline
Free — no account needed
Why Local Disk Stops Working
It works on your machine — it breaks the moment you redeploy or scale
How Object Storage Actually Works
Buckets, keys, and the S3 API that most providers now speak
Uploading and Serving Your First File
From SDK install to a real file uploaded and fetched back over HTTPS
Full course — $59 one-time
Choosing an Object Storage Provider
S3, R2, Backblaze B2, Wasabi, DigitalOcean Spaces, MinIO — what actually differs
Egress Fees — The Hidden Cost
The bill that looks fine in month one and explodes once real users show up
Access Control and Avoiding Public Bucket Leaks
Presigned URLs, private-by-default buckets, and the misconfiguration that keeps making headlines
Pairing Object Storage with a CDN
Cutting egress cost and latency at the same time by serving from the edge
The Production Object Storage Checklist
Access, cost, lifecycle, and the disaster-recovery question most teams never actually test
Get the full course
8 lessons — from your first bucket upload to a production-grade access, cost, and recovery checklist.
About this course
Saving uploaded files to a server's local disk works in development and breaks the first time you redeploy, scale past one instance, or actually need the durability guarantees a real storage provider gives you. Learning object storage means understanding the bucket-key-object model that Amazon S3 popularized and most providers now share, how to upload and serve files correctly through that shared S3-compatible API, how to avoid the egress fees that quietly inflate a storage bill, and how to lock down access with presigned URLs so a bucket is never accidentally left public.
This course is for developers whose current upload flow writes to a server disk or "/tmp" and breaks on redeploy. After completing it you will be able to upload and serve a real file from S3-compatible storage, choose between Amazon S3, Cloudflare R2, Backblaze B2, Wasabi, DigitalOcean Spaces, and MinIO based on real cost and egress tradeoffs, generate short-lived presigned URLs so uploads never touch your server unnecessarily, pair a bucket with a CDN to cut both cost and latency, and run a production checklist covering lifecycle rules, versioning, and a tested restore.
Frequently asked questions
Why does saving uploads to my server's disk stop working in production?
Most modern hosting platforms run on ephemeral filesystems — anything written to disk during a request can be gone on the next deploy, and the moment you run more than one server instance, a file uploaded to one instance is invisible to the others. Object storage exists independently of any single server, so every instance reads and writes the same bucket regardless of how many are running.
What is the difference between a bucket, a key, and an object in object storage?
A bucket is the top-level container with a unique name. An object is the actual file you store. A key is the full path-like string that identifies that object inside the bucket — for example uploads/2026/06/invoice.pdf. There are no real nested folders; a bucket is a flat namespace of keys that tools display as folders for convenience only.
Why does the S3 API matter if I am not using Amazon S3?
Cloudflare R2, Backblaze B2, Wasabi, and DigitalOcean Spaces all implement the same S3 API that Amazon popularized, using the same SDKs and request signing. This means switching providers can be close to a one-line endpoint change, and it is why these providers compete mainly on price and egress fees rather than on API differences.
What is egress and why does it matter more than storage price?
Egress is what you pay to transfer data out of a bucket — to an end user's browser or to another cloud. Storage cost scales with how much you keep; egress scales with how much gets viewed, which is why a popular file can generate meaningful charges on a per-GB-billed provider like Amazon S3 even though storing it costs almost nothing. Cloudflare R2 and Wasabi charge zero egress, which can change the total bill by an order of magnitude for content-heavy apps.
How do I make sure my bucket never gets accidentally exposed publicly?
Set buckets to private by default and grant access explicitly through short-lived presigned URLs rather than making a whole bucket public. A publicly readable bucket containing user uploads or backups is one of the most common and most avoidable data exposure incidents in production software — treat "should this be public" as a deliberate per-bucket decision, never a default you forgot to change.