How asset preview works, when public and signed URLs differ, how cache purge is enabled, and what the cost view is actually estimating.
- Inline preview eligibility
- Public URL and signed URL behavior
- Cloudflare cache purge requirements
- Cost analysis estimate model
Preview, URLs, cache purge, and cost analysis
Inline preview support
The app supports inline preview for selected image and text formats.
Image preview candidates:
- jpg
- jpeg
- png
- webp
- gif
- svg
- avif
Text preview candidates include:
- plain text
- json
- md
- html
- css
- js
- ts
- tsx
- yml
- yaml
- xml
Preview eligibility also depends on the configured maximum preview file size. If the object is larger than the preview threshold, the app reports that preview is disabled for size, not that the object is broken.
Preview settings that matter
Preview behavior is controlled from Settings > Preview:
- Enable image preview
- Enable inline text preview
- Max preview file size
- Signed URL preview expiry
If inline preview is disabled in settings, the product reports that directly. It does not silently fall back to frontend-side credential use.
Signed URLs
Signed URLs are generated in the backend.
Important boundaries:
- object-level signed URL generation is an R2 backend operation
- preview signed URLs are also backend-generated
- the frontend does not sign URLs itself
Signed URL expiry is clamped for safety:
- preview URL generation uses a short-lived expiry window
- object action signed URLs can use a longer expiry, but still within bounded limits
Use signed URLs when the object is private and you need time-limited access or sharing.
Public URLs
Public URL generation is mapping logic, not a permission grant.
Current mapping order:
- profile CDN domain, if configured
- profile public base URL, if configured
- raw R2 endpoint path
If no CDN or public base URL exists, the app can still return an endpoint-based URL. That does not mean the object is publicly readable. It only means the product can construct a URL shape.
Cache purge requirements
Cache purge is available only when the active profile includes:
- Cloudflare Zone ID
- Cloudflare API token with purge permission
- a public URL mapping that resolves the selected object to the actual public URL
If any of those are missing, purge actions are unavailable by design.
The product supports:
- purging selected object URLs
- purging arbitrary URLs from the cache tools area
- validating whether the active profile has enough purge configuration
Use purge only when the selected URL maps to the real public asset path. If the object cannot be mapped to a public URL, the product blocks purge instead of guessing.
Preview and delivery workflow
A reliable delivery workflow usually looks like this:
- Upload or sync the asset.
- Confirm metadata and cache-control in object details.
- Preview the asset if the file type is supported.
- Copy the public URL or generate a signed URL.
- Purge the public URL if you are replacing cached content.
That keeps storage, delivery, and cache operations attached to the same object context.
Cost analysis is an estimate layer
The cost view is not pretending to be authoritative Cloudflare billing data.
Current purpose:
- show bucket footprint
- show prefix footprint
- highlight largest prefixes
- highlight largest objects
- estimate monthly storage cost from your configured storage price
Use it for operational visibility and prioritization, not for invoice reconciliation.
Cost settings that matter
In Settings > Cost Analysis, the current operator-facing controls are:
- currency
- storage price per GB per month
Those values shape how the estimate is rendered. If your pricing assumptions are wrong, the estimate will also be wrong.
Common mistakes
"Public URL" does not work in the browser
Check:
- whether the object is actually served publicly
- whether the CDN domain or public base URL is correct
- whether the copied URL shape matches the public delivery path
Preview is unavailable for a supported file type
Check:
- preview file size threshold
- preview settings toggles
- object content type and extension
Purge is unavailable
Check:
- Zone ID
- API token
- token scope
- URL mapping for the selected object
Cost numbers look low or high
Check:
- storage price setting
- whether you are reading bucket vs prefix scope
- whether you expected invoice-grade billing instead of a storage estimate