From the Architect Panel → File Stores, click New. The configuration depends on the storage mode you pick.
Common fields
- Name — internal name shown in dropdowns where File Stores are referenced.
- Description — optional. Useful for documenting what this File Store is intended for.
- Storage Mode — Local or S3.
- Public / Private — whether files are directly URL-accessible:
- Public: files have a guessable URL and can be accessed without authentication.
- Private: files are only accessible via
fetchfile.phpwhich enforces permissions.
- Allowed File Types — restrict uploads to specific MIME types or extensions.
- Max File Size — reject uploads above this size.
Local-mode settings
When Storage Mode = Local:
- Path — directory where files are stored. Relative to the platform's root for public stores; outside the web root for private stores.
- URL Prefix — the URL path that the platform serves files from (for public stores).
S3-mode settings
When Storage Mode = S3:
- Bucket Name — the S3 bucket.
- Region — AWS region the bucket lives in.
- Access Key / Secret — AWS credentials. Or, if running on EC2, leave blank to use the instance's IAM role.
- Path prefix — optional sub-path inside the bucket (useful for sharing one bucket between multiple File Stores).
- Optional CloudFront distribution for CDN delivery — set the CloudFront URL here and the platform serves files via the CDN.
Testing
Upload a test file via a File Upload field pointing at the new store. Verify:
- The upload completes without errors.
- The file appears in the configured location (local path or S3 bucket).
- The file is retrievable via the platform's UI (downloads or displays correctly).
- For public stores: the file URL works in an incognito browser without authentication.
- For private stores: the file URL via
fetchfile.phpworks for authorised users but returns 403 for unauthorised.
Three real-world configurations
Example 1: Public marketing assets
Name: "Marketing Assets". Storage Mode: S3. Public: yes. Bucket: acme-marketing-assets. CloudFront distribution configured for fast global delivery. Used for product images, hero photos, logos referenced from public pages.
Example 2: Private customer documents
Name: "Customer Documents". Storage Mode: S3. Public: no. Bucket: acme-customer-private with bucket policy blocking public access. Files only served via fetchfile.php with permission checks. Used for contracts, ID uploads, signed documents.
Example 3: Local development store
Name: "Dev Uploads". Storage Mode: Local. Public: no. Path: /var/data/dev-uploads (outside the web root). Used during development for everything; production uses S3 instead.
