| name | NestJS File Uploads |
|---|---|
| description | Secure file handling, Validation, and S3 streaming. |
| metadata | {"labels": ["nestjs", "upload", "multer", "s3"], "triggers": {"files": ["**/*.controller.ts"], "keywords": ["FileInterceptor", "Multer", "S3", "UploadedFile"]}} |
File Upload Patterns
Priority: P0 (FOUNDATIONAL)
Secure file upload handling with validation and storage patterns.
- Magic Bytes: NEVER trust
content-typeheader or file extension. - Tool: Use
file-typeormmmagicto verify the actual buffer signature. - Limits: Set strict
limits: { fileSize: 5000000 }(5MB) in Multer config to prevent DoS.
Streaming (Scalability)
- Memory Warning: Default Multer
MemoryStoragecrashes servers with large files. - Pattern: Use Streaming for any file > 10MB.
- Library:
multer-s3(direct upload to bucket) orbusboy(raw stream processing). - Architecture:
- Client requests Signed URL from API.
- Client uploads directly to S3/GCS (Bypassing API server completely).
- Pro Tip: This is the only way to scale file uploads infinitely.
Processing
- Async: Don't process images/videos in the HTTP Request.
- Flow:
1. Upload file.
2. Push
FileUploadedEventto Queue (BullMQ). 3. Worker downloads, resizes/converts, and re-uploads.