Storage
Attachment volume and file mix, the configured storage target, and read-only upload limits.
Overview
The Storage panel answers "how much are we holding, and what is it?" for the attachment estate — total file count and bytes, broken down by the entity the files hang off, by file type, by disk, and by category — alongside the storage target and upload limits the system is actually enforcing.
Nothing on this screen is editable. Upload limits come from
config/attachments.php and the environment, so they change with a deploy, not
with a click.
Where it lives
Route: /admin/settings/storage (admin.settings.storage)
Open Admin → System → Storage. Requires settings.view.
Sections
- Headline counters — attachments, total size, thumbnails, largest file, and average file size
- Storage target — default disk, driver, bucket / region / root prefix where the driver exposes them, and whether unsigned download URLs are permitted
- By entity type — bytes per attachable entity (Account, Rental, CatalogueItem, …) as a share of the whole
- By file type — rolled up into families (Images, PDFs, Documents, Spreadsheets, Text & data, Archives, Video, Audio, Other), with the individual media types behind a disclosure
- By disk and category — per-disk totals, flagging any disk that is not the configured default, and per-category totals
- Upload limits — maximum file size, maximum files per entity, how many entities have reached that cap, thumbnail dimensions, the per-entity caps, and the full allowed media-type list
Notes
Attachments are not scoped to a warehouse. A file hangs off the entity it belongs
to, so warehouse-level totals follow that entity rather than the file. There is no
warehouse_id on the attachments table and the panel does not invent one.
Figures are cached for five minutes. Every number is a grouped aggregate query — no attachment row is ever loaded — so the page costs a fixed handful of queries no matter how large the table grows. The cache is TTL-only: uploads and deletions do not bust it, because these are reporting aggregates rather than state the UI reads back after a write, and wiring the whole file pipeline into a cache bust to save an operator five minutes of staleness is a poor trade. The panel prints the calculation timestamp, and Recalculate drops the cached payload if you need the numbers now.
The S3 warning. If the default disk uses any driver other than s3, the
Storage target section says so. That is expected in local development and worth
investigating in production — Signals warehouses attachments on S3 by convention,
with signed, expiring download URLs.
Related
- System Health — live disk connectivity probe
- Caching — cache store health and TTLs
- Developer deep-dive: Caching Strategy