| Driver | Typical use | Configuration |
|---|---|---|
| Public (local) | One server, simplest setup | Files live in storage/app/public , served through public/storage . |
| Amazon S3 | Managed object storage | Access key, secret, region, bucket, and optionally a CloudFront CDN with signed addresses. |
| DigitalOcean Spaces | S3-compatible object storage | Access key, secret, region, bucket. |
| Wasabi | S3-compatible object storage | Access key, secret, region, bucket. |
| MinIO | Self-hosted object storage | Access key, secret, region, bucket, endpoint. |
| Pushr | Object storage with a CDN | Access key, secret, bucket, endpoint, CDN hostname. |
| Cloudflare R2 | S3-compatible edge storage | Access key, secret, bucket, region, endpoint, public address. |
Create the bucket first, give the credentials access to that bucket only, and set CORS rules for your domain if browsers read objects directly. After saving, upload an image to a page and open it from the published docs.
Private docs and files. On cloud storage, files of password-protected and members-only sites are served through short-lived links, so a saved address stops working. On local disk, files have unguessable names, and anyone who has the exact address can open them. Tell customers with sensitive docs to pick cloud storage, or keep sensitive material out of images and attachments.
Uploads count toward the workspace's storage limit when billing is on.
Upload limits
Admin → Settings → Media sets the largest image or file editors can put on a page, the allowed file extensions, avatar sizes, and whether large files upload in parts. Uploading in parts (a few MB each) gets around low upload limits on shared hosting and behind Cloudflare; a 100 MB import then arrives as many small requests.