Infrai storage developer guides
Every Infrai storage guide in one place: quickstarts, production patterns, error resolution, and operations runbooks verified against the live API.
answers
- 429s in an image pipeline: retry the upload, never the render
- Kick off transcoding when a video lands, without polling the bucket
- Fixing upload timeouts for large AI-generated PNG and WebP renders
- Malformed base64 when saving a generated PNG to object storage
- Expire backups after 30 days with object-storage lifecycle rules
- Square avatar crops with sharp, stored as a size set in private storage
- No object versioning? Give avatars a rollback window instead
- Replacing an avatar safely when two uploads race for the same key
- The restore half of a backup: an admin download flow in Node 22
- Cheapest object storage for app backups: price the restore, not the archive
- Cheapest object storage for SaaS documents: measure before you shop
- Object storage key naming for originals, thumbnails, WebP and AVIF
- Picking object storage for AI-generated images in a SaaS
- Four probes to run before you pick a bucket for browser uploads
- Choosing object storage for image thumbnails in a Node.js SaaS app
- Choosing object storage for private SaaS user documents in Node 22
- Choosing a signed-download-URL service for SaaS file exports
- The simplest avatar storage for a Node SaaS, judged by setup steps
- The three-route Express pattern for delegated browser uploads
- Browser-direct uploads with no proxy: R2, S3, B2, Bunny and Infrai
- A multi-tenant key layout for PDFs, DOCX and invoices in one bucket
- Storage layout for an AI image app: originals, variants, cleanup
- Uploading large AI-generated images: a size-based strategy in Node
- Per-user prefixes for AI image output: layout, retention, deletion
- Why a presigned PUT avatar upload dies at the CORS preflight
- Presigned PUT, private bucket, signed download: what Express really needs
- Browser-direct uploads: what presigned URLs actually cost on Infrai
- Avatar uploads in Next.js: the easiest setup that actually works
- Presigned PUT fails from the browser: reading the CORS error properly
- Private document uploads: presign direct, or relay through your API?
- Express, presigned URLs and user documents: uploads vs downloads
- Download link 404 after an export job: prefix, race, or expiry?
- Scan-then-promote: bucket events as the trigger for upload processing
- Browser upload, backend thumbnails: what actually works in Next.js
- Browser uploads of private documents: the CORS wall and the way round
- React document uploads: presigned direct, proxy, or JSON body?
- Bucket events to a thumbnail worker: webhook, queue, retries
- Serving a static site straight from an object bucket: what breaks
- Large-file multipart uploads: part size is what sets the price
- Cheap backup storage for a small SaaS: dumps, uploads, EU residency
- Cheaper than Cloudinary or UploadThing: a plain object-storage upload
- Delivering CSV exports: signed URLs or files on the app server?
- Storing AI-generated images cheaply: lifecycle rules and signed URLs
- Cleaning up old thumbnails when a user replaces an image
- Knowing an upload finished when it never touched your backend
- Document retention on object storage: prefixes, expiry rules, erasure
- Controlling the saved filename on a signed export download
- Retried image jobs that overwrite, vanish, or come back stale
- Write-once transaction receipts: what a bucket can't promise you
- Express CSV export: build it, store it, hand back a signed link
- Simplest CSV round-trip storage for a Codex-built data app
- Drive and Dropbox APIs vs object storage for app-generated files
- Object storage: official SDK or raw REST, and what changes with AI
- Nightly full-app backup: database dump plus user uploads, one bucket
- Uploading a 500 MB video from Node 22 in four multipart calls
- Does this object already exist? Size and hash checks without downloading
- Watching per-bucket storage growth before the invoice arrives
- Choosing image storage when downloads, retention and EU residency collide
- Enforcing a submission deadline at the object storage layer
- Storage that survives AI-generated code: no IAM, no SDK, one token
- Delegating uploads without shipping cloud keys to the client
- Serving podcast audio from a bucket: four things to check first
- Tiering logs/ to cold storage and expiring at 90 days in one call
- Abandoned multipart uploads: invisible, persistent, and yours to govern
- Multipart upload of a large backup file in Node: resume, complete, abort
- 100 MB to 1 GB documents: when to switch to multipart upload
- Export downloads that time out: range requests and resumable pulls
- Multipart uploads for big files: who gets to assemble the parts list?
- Multipart image upload plus a sharp thumbnail pipeline in Node 22
- Shipping a 1 GB zip export: worker upload and a download link
- Multipart complete rejects your parts list: which failure is it?
- Corrupted ZIP after a multipart export upload: how to diagnose it
- Expiring one-week CSV exports without writing a cleanup job
- Next.js route handler: private PDF export with an expiring download URL
- sharp thumbnails in a Next.js route handler, and where the time goes
- Saving AI-generated PNGs from a Next.js route handler to a bucket
- Server Actions and private file storage: what fits, what needs a route
- Node 22 without the S3 SDK: store a render, sign a download
- Private PDF and DOCX uploads in Node, with signed links and a user id
- Resize with sharp, store in a private bucket, hand back a signed URL
- Multipart upload of a large AI-generated PNG from Node 22
- Presigned download URLs in Node 22 for private export files
- Node.js: moving a generated image into a private bucket
- Nightly app backups to a bucket: schedule, upload, expire, restore
- Building a folder browser on a bucket that has no folders
- Thumbnails from a private bucket: sharp, a worker, signed GETs
- Serving US and EU users from one storage account, honestly
- Streaming pg_dump straight into a private bucket from Node, and back
- Signed downloads with the wrong filename or MIME type: what to fix
- Presigned URL returns 403: separating the five causes in one pass
- Signed image URLs expiring in production: diagnosis and the fix
- Avatars in an auth app: signed private URL or public CDN URL?
- Private file uploads: what a signed URL protects, and what it doesn't
- Private image delivery in an EU SaaS: signed URLs beat blob columns
- Content-hashed keys: cache storefront images forever, change them anytime
- Self-hosted MinIO or managed object storage? The honest ops math
- MinIO on a spare box vs paid object storage, for a small team
- Signed URLs for private document downloads: who pays the egress
- Presigned POST, PUT or multipart: choosing by file size
- The smallest private document store that still works: four calls
- Thumbnails for a small SaaS: storage, image CDN, or resize on upload?
- Where generated images belong: local disk, Postgres bytea, or a bucket
- Base64 in JSON or a presigned binary PUT: how to pick, with measurements
- Do avatar-sized uploads need multipart? The size threshold, measured
- Generated images in a private bucket, with links that expire
- Postgres blobs or object storage for user documents: the real cutoff
- Supabase Storage vs S3 vs R2 for a Next.js app with private files
- Export download links: the link clock and the object clock are different
- Refresh spam on a download page: cache signed URLs, don't re-sign
- CORS errors on direct uploads: config problem or dead end?
- Buckets can't be searched by tag or content type — design around it
- Avatar uploads: object storage, database blob, or local disk?
- Avatar uploads in Node: signed URL or straight through your server?
- A Vue 3 upload bar that tells the truth about where the bytes are
- Already on DigitalOcean droplets: Spaces, S3, or neither?
- Server-side copy: moving objects from a live prefix to an archive
- Accidental-deletion defenses for a production object store
- Sweeping thousands of stale temp objects with batched delete calls
- React file uploads to object storage: the five steps that matter
- Pushing a file to object storage with curl and nothing else
- A bucket decommission runbook where nothing is deleted on a human's word
- Why your avatar URL stops working: private buckets have no public link
- Why a browser can't PUT thumbnails straight into a private bucket