Cloud Storage & Upload Limits
ClientCove can store resource files locally on your WordPress server or in DigitalOcean Spaces, AWS S3, or Google Cloud Storage. Cloud storage is the right choice for any portal hosting large files (videos, design assets, big PDFs) or high-traffic libraries.
Storage Providers
| Provider | Identifier | Best For |
|---|---|---|
| Local | local | Small portals, low file counts, quick start |
| DigitalOcean Spaces | spaces | Most ClientCove deployments — predictable pricing, S3-compatible API |
| AWS S3 | s3 | AWS-native infrastructure, fine-grained IAM |
| Google Cloud Storage | gcs | GCP-native infrastructure |
The active provider is chosen in Settings → Storage.
Direct Upload vs Through-PHP
How a file gets from the user's browser to storage depends on the provider:
| Mode | Trigger | Behavior | Practical Limit |
|---|---|---|---|
| Direct upload | Cloud provider active (spaces, s3, or gcs) | Browser uploads straight to the bucket via signed URL — never touches PHP | Effectively unlimited (provider's own limits apply, e.g. S3 single-part 5 GB) |
| Through-PHP | Local provider active | Files POST to wp-admin/async-upload.php and PHP writes them to disk | Capped by upload_max_filesize and post_max_size (typically ~64 MB on shared hosts) |
ClientCove decides automatically. The Resources page exposes the choice as JavaScript config:
window.resourceManagerConfig = {
directUpload: true, // true when cloud is active
storageProvider: 'spaces' // or 's3' / 'gcs' / 'local'
}
Configuring a Cloud Provider
- Go to Settings → Storage
- Pick the provider
- Enter credentials:
- DigitalOcean Spaces: access key, secret key, region, bucket name, CDN endpoint (optional)
- AWS S3: access key ID, secret access key, region, bucket
- Google Cloud Storage: service account JSON key, bucket
- Choose Public or Private as the default visibility for new uploads
- Save
A connection test runs after save. Resolve any errors before continuing.
Upload Size Limits
Local mode (through-PHP)
Determined by your PHP and web server config:
| Setting | Typical Default | What It Affects |
|---|---|---|
upload_max_filesize | 2–64 MB | Max single file size |
post_max_size | 8–64 MB | Max total request size |
memory_limit | 128–256 MB | PHP memory available during upload |
Nginx client_max_body_size | 1 MB (default) | Max request body size at the proxy |
Increase any of these in php.ini, .htaccess, or your hosting control panel. For Nginx, edit the server block.
Cloud mode (direct upload)
| Provider | Single-part Max | Multi-part Max |
|---|---|---|
| DigitalOcean Spaces | 5 GB | 5 TB |
| AWS S3 | 5 GB | 5 TB |
| Google Cloud Storage | 5 TB | 5 TB |
ClientCove uses single-part uploads for files under 100 MB and switches to multi-part for larger files automatically.
Public vs Signed URLs
Each file is stored with a visibility flag:
Public files
Use fast, cacheable public URLs. Best for:
- Brand kit images
- Color palette swatches
- Public marketing PDFs
- Anything you'd be comfortable posting on a website
Private files
Use short-lived signed URLs that ClientCove regenerates on every download request. Best for:
- Client deliverables
- Contracts and legal documents
- Sensitive design files
- Anything that should not be hot-linkable
Signed URLs typically expire 1 hour after generation. The portal regenerates them transparently when a user clicks download.
Migrating Existing Files
Switching providers (e.g. local → Spaces) does not automatically migrate existing files. Old files keep working from their original location; only new uploads go to the new provider.
To consolidate:
- Configure the new provider
- Run Settings → Storage → Migrate Existing Files (when present)
- Monitor progress — large libraries can take hours
- After verification, optionally delete originals from the old location
Always test a provider switch on a staging copy first. Failed migrations leave files in mixed locations, which is recoverable but tedious.