This document describes the comprehensive file upload implementation with AWS S3 cloud storage integration for the Muse AI Art Marketplace. The implementation provides secure, scalable, and efficient file handling capabilities with support for multiple file formats, image optimization, and automatic cleanup.
- Single File Upload: Upload individual files with validation and processing
- Multiple File Upload: Upload up to 5 files simultaneously
- Artwork Image Upload: Specialized endpoint for artwork images with optimization
- File Management: Delete, metadata retrieval, and listing capabilities
- Presigned URLs: Generate secure URLs for client-side uploads
- Image Processing: Automatic resizing, format conversion, and optimization
- Security: File type validation, size limits, and authentication requirements
- Multiple Image Formats: Support for original, thumbnail, medium, large, WebP, and AVIF formats
- Automatic Cleanup: File deletion when artwork is deleted
- Metadata Storage: Comprehensive file metadata tracking
- Error Handling: Robust error handling with detailed logging
- Rate Limiting: Built-in protection against abuse
- Purpose: Core AWS S3 integration and file operations
- Features:
- File upload with processing
- File deletion and metadata retrieval
- Presigned URL generation
- Image processing with Sharp
- File validation
- Bucket management
- Purpose: Request validation and processing
- Features:
- Multer configuration for memory storage
- File type and size validation
- Upload options configuration
- Error handling
- Purpose: HTTP request handling and response formatting
- Features:
- Single and multiple file upload endpoints
- File management operations
- Artwork-specific image upload
- Presigned URL generation
- Purpose: Enhanced data model with file upload support
- New Fields:
fileUpload: Upload metadata and S3 informationimages: Multiple image format URLs
- Purpose: API endpoint definitions and middleware configuration
- Features:
- Authentication requirements
- Middleware chaining
- Error handling
POST /api/upload/single
POST /api/upload/multiple
POST /api/upload/artwork-imageDELETE /api/upload/:key
GET /api/upload/:key/metadata
GET /api/upload/:key/download-url
GET /api/upload/list
GET /api/upload/bucket-infoGET /api/upload/presigned-urlPOST /api/upload/publicPOST /api/upload/single
Content-Type: multipart/form-data
Authorization: Bearer <token>
Body:
file: <file>
folder: uploads (optional)
public: true (optional)Response:
{
"success": true,
"data": {
"file": {
"url": "https://bucket.s3.amazonaws.com/key",
"key": "uploads/filename-uuid.jpg",
"bucket": "bucket-name",
"contentType": "image/jpeg",
"size": 1024000,
"etag": "\"etag-value\""
},
"message": "File uploaded successfully"
}
}POST /api/upload/multiple
Content-Type: multipart/form-data
Authorization: Bearer <token>
Body:
files: <file1>
files: <file2>
files: <file3>POST /api/upload/artwork-image
Content-Type: multipart/form-data
Authorization: Bearer <token>
Body:
image: <file>
width: 800 (optional)
height: 600 (optional)
quality: 85 (optional)
format: webp (optional)# AWS S3 Configuration
AWS_REGION=us-east-1
AWS_S3_BUCKET=muse-artwork-uploads
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_S3_ENDPOINT=https://nyc3.digitaloceanspaces.com (optional)
# File Upload Limits
MAX_FILE_SIZE=10485760 # 10MB
MAX_IMAGE_SIZE=20971520 # 20MB
ALLOWED_FILE_TYPES=image/jpeg,image/png,image/webp,image/gif,image/svg+xml-
Create S3 Bucket:
aws s3api create-bucket \ --bucket muse-artwork-uploads \ --region us-east-1
-
Configure CORS:
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"], "AllowedOrigins": ["https://yourdomain.com"], "ExposeHeaders": ["ETag"] } ] -
Set Bucket Policy (for public access):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::muse-artwork-uploads/*" } ] }
- Input: JPEG, PNG, WebP, GIF, SVG
- Output: JPEG, PNG, WebP, GIF
- Optimization: Automatic compression and format conversion
- Resize: Width, height, and fit options
- Quality: 1-100 (default: 80)
- Format: Automatic conversion to WebP for better compression
- Original image uploaded
- Validate file type and size
- Process with Sharp (resize, optimize, convert)
- Upload to S3 with metadata
- Return optimized URL
- Type Checking: MIME type and extension validation
- Size Limits: Configurable maximum file sizes
- Content Verification: Actual file content validation
- Required: Most endpoints require valid JWT token
- Authorization: File ownership verification
- Rate Limiting: Built-in protection against abuse
- Public Files: Configurable public access
- Private Files: Presigned URLs for secure access
- User Isolation: Files organized by user folders
{
"success": false,
"error": "File validation failed",
"message": "File type image/svg+xml is not allowed"
}{
"success": false,
"error": "File too large",
"message": "File size exceeds maximum allowed size of 10MB"
}{
"success": false,
"error": "Unauthorized",
"message": "Valid authentication token required"
}interface IArtwork extends Document {
// ... existing fields
fileUpload?: {
key: string
bucket: string
contentType: string
size: number
etag?: string
originalName: string
uploadDate: Date
}
images?: {
original?: string
thumbnail?: string
medium?: string
large?: string
webp?: string
avif?: string
}
}When an artwork is deleted:
- Delete main file from S3
- Delete all image format variants
- Remove database records
- Log cleanup operations
- Unit Tests: Service and middleware testing
- Integration Tests: API endpoint testing
- Mock Services: AWS SDK mocking
- Error Scenarios: Comprehensive error testing
# Run all file upload tests
npm test -- fileUpload.test.ts
# Run with coverage
npm test -- --coverage fileUpload.test.ts- Memory Storage: Files processed in memory, no disk I/O
- Parallel Processing: Multiple files processed concurrently
- Caching: Redis caching for frequently accessed files
- CDN Integration: CloudFront for global distribution
- File Upload Metrics: Track upload success rates
- Storage Usage: Monitor S3 bucket usage
- Error Rates: Track and alert on errors
- Performance: Upload and processing times
- Environment Variables: Secure configuration management
- IAM Roles: Least-privilege AWS access
- Monitoring: CloudWatch integration
- Backup: S3 versioning and cross-region replication
- Horizontal Scaling: Multiple app instances
- Load Balancing: Application Load Balancer
- CDN: CloudFront for static assets
- Database: MongoDB Atlas scaling
# Verify credentials
aws sts get-caller-identity
# Test S3 access
aws s3 ls s3://muse-artwork-uploads- Check CORS configuration
- Verify bucket permissions
- Validate file size limits
- Check network connectivity
- Verify Sharp installation
- Check memory limits
- Validate image formats
- Monitor processing logs
- Video Upload: Support for video files
- Advanced Processing: Watermarking, filters
- Batch Operations: Bulk upload and processing
- Analytics: File usage statistics
- CDN Integration: Automatic CDN deployment
- Streaming Uploads: Large file streaming
- Background Processing: Async image processing
- Smart Caching: Intelligent cache invalidation
- Compression: Advanced compression algorithms
For issues and questions:
- Check logs:
logs/upload-*.log - Review error responses
- Verify AWS configuration
- Test with smaller files
- Check network connectivity
Implementation Date: April 2026 Version: 1.0.0 Last Updated: 2026-04-22