Once a WordPress site has been running for a couple of years, the wp-content/uploads folder is usually the single biggest thing on the server — often bigger than the database, the theme, and every plugin combined. That’s the point at which moving media off local disk and onto object storage (Amazon S3, Cloudflare R2, DigitalOcean Spaces, or Backblaze B2) stops being an optimization and starts being a practical necessity: smaller server disks, faster backups, and a CDN-ready origin for images without paying for expensive block storage that scales with your server plan instead of your actual media library.
Why Local Uploads Become a Problem
Local disk on most VPS and cloud-hosting plans is provisioned in fixed tiers — you might be paying for a 4GB RAM plan that happens to come with only 80GB of SSD, and once uploads eat into that, you’re forced into an expensive plan upgrade just for storage, not compute. Local uploads also make full-server backups slower and larger every single day, since your backup tool has to re-copy gigabytes of images that haven’t changed since last week.
Choosing a Provider: S3 vs R2 vs Spaces vs B2
The four realistic options for WordPress media each have a different pricing shape:
- Amazon S3 — the default choice because of ecosystem maturity and plugin support, but egress (bandwidth out) is billed per GB and can add up if you’re not fronting it with a CDN.
- Cloudflare R2 — priced around $0.015/GB stored per month with zero egress fees, which makes it the cheapest option specifically for image-heavy sites serving a lot of traffic.
- DigitalOcean Spaces — bundles storage and a CDN for a flat rate around $5/month for the first 250GB, simplest to reason about if you’re already hosting on DigitalOcean droplets.
- Backblaze B2 — the cheapest raw storage (around $0.005/GB/month) and pairs with Cloudflare’s free “Bandwidth Alliance” egress waiver when fronted by Cloudflare, making it a strong budget pick for archival-heavy media libraries.
Setting It Up: Offload vs Full Migration
There are two ways to use object storage with WordPress, and they solve different problems:
Media Offload Plugins
A plugin like WP Offload Media rewrites new upload URLs to point at your object storage bucket and can bulk-migrate existing uploads in the background. This is the lower-effort path: WordPress keeps working exactly as it did, uploads just physically live somewhere else, and the plugin rewrites `src` attributes automatically. Good for sites under a few hundred thousand images.
Full Decoupling With a CDN in Front
For larger media libraries, put a CDN (Cloudflare, Bunny CDN, or CloudFront) in front of the bucket directly and serve images from a subdomain like media.yoursite.com rather than routing every image request back through the offload plugin’s rewrite logic. This adds a setup step but removes a layer of indirection at request time, which matters once you’re serving tens of thousands of image requests a day.
What Actually Breaks During the Move
- Responsive image srcset entries — if the offload plugin doesn’t regenerate all registered image sizes in the bucket, some breakpoints will 404 while the base image still loads, which is easy to miss on a quick visual check.
- Hardcoded absolute URLs in old post content — image URLs pasted directly into the block editor as HTML rather than as a proper media block won’t get rewritten by most offload plugins and need a targeted search-and-replace pass.
- Bucket CORS policy — fonts and some page-builder assets served from the bucket need a permissive CORS header or browsers will silently refuse to load them.
Verdict
Object storage pays for itself once your uploads folder crosses roughly 10–20GB or your backups start taking noticeably longer to run. For most WordPress sites, Cloudflare R2 or DigitalOcean Spaces hit the best balance of low cost and low setup complexity, with a media offload plugin handling the URL rewriting so the switch is invisible to editors using the site day-to-day. Verify srcset sizes and CORS headers after migration — those are the two things that fail silently instead of loudly.

![CATALYST INC AND THE THOMPSON GRAVING DOCK [QUEENS ISLAND BELFAST]-151284](https://hoststackpro.com/wp-content/uploads/2026/06/reviews-739-80x80.jpg)