| license | Apache-2.0 |
| name | file-upload-storage-expert |
| description | S3, multipart uploads, CDN integration, and presigned URLs for file storage. Activate on: file upload, S3, presigned URL, multipart upload, CDN, blob storage, image upload, media storage. NOT for: data warehouse storage (use lakehouse-architect), database design (use dimensional-modeler). |
| allowed-tools | Read,Write,Edit,Bash(npm:*,npx:*,aws:*,wrangler:*) |
| category | Backend & Infrastructure |
| tags | ["file-upload","s3","cdn","storage","presigned-url"] |
| pairs-with | [{"skill":"api-gateway-reverse-proxy-expert","reason":"Upload routing and size limits at the gateway"},{"skill":"cache-strategy-invalidation-expert","reason":"CDN cache invalidation for updated assets"},{"skill":"observability-apm-expert","reason":"Upload latency and failure rate monitoring"}] |
File Upload & Storage Expert
Design secure, scalable file upload and storage systems with presigned URLs, multipart uploads, CDN distribution, and lifecycle management.
Activation Triggers
Activate on: "file upload", "S3", "presigned URL", "multipart upload", "CDN", "blob storage", "image upload", "R2", "media storage", "upload progress"
NOT for: Data lake storage → lakehouse-architect | Database BLOB columns → dimensional-modeler | Video processing pipelines → relevant media skill
Quick Start
- Choose storage backend — S3, R2 (zero egress), GCS, or Supabase Storage
- Generate presigned URLs server-side — never expose credentials to clients
- Implement multipart upload for files >10MB with resume capability
- Process asynchronously — thumbnails, transcoding, virus scanning via queue
- Serve via CDN — CloudFront, Cloudflare, or Vercel Edge for global delivery
Core Capabilities
| Domain | Technologies |
|---|
| Object Storage | AWS S3, Cloudflare R2, GCS, MinIO |
| Upload Libraries | @aws-sdk/client-s3, tus-js-client, Uppy 4.x |
| CDN | CloudFront, Cloudflare CDN, Fastly |
| Processing | Sharp (images), FFmpeg (video), ClamAV (scanning) |
| Managed | Supabase Storage, Vercel Blob, Uploadthing |
Architecture Patterns
Presigned URL Upload Flow
Client Server S3/R2
│ │ │
├─ POST /upload/init ────→│ │
│ { filename, type } │ │
│ ├─ createPresignedPost() ─→│
│ │ │
│←── { url, fields } ────┤ │
│ │ │
├─ PUT (direct to S3) ──────────────────────────────→│
│ │ │
│ │←── S3 Event Notification│
│ ├─ Process (thumbnail, │
│ │ scan, metadata) │
│←── webhook: ready ─────┤ │
Multipart Upload with Resume