ื“ืœื’ ืœืชื•ื›ืŸ ื”ืจืืฉื™

File Storage

File storage architecture supporting multiple providers for screenshots, documents, and assets.

Storage Providersโ€‹

ProviderEnum ValueUse Case
LocalLOCALDevelopment, self-hosted
AWS S3S3Production cloud storage
WasabiWASABIS3-compatible, cost-effective
CloudinaryCLOUDINARYImage optimization & CDN
DigitalOcean SpacesDIGITALOCEANS3-compatible

Configurationโ€‹

# Storage provider selection
FILE_PROVIDER=LOCAL # LOCAL | S3 | WASABI | CLOUDINARY | DIGITALOCEAN

# Local storage
FILE_LOCAL_PATH=./apps/api/assets

# AWS S3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
AWS_S3_BUCKET=gauzy-files
S3_FORCE_PATH_STYLE=false

# Wasabi (S3-compatible)
WASABI_ACCESS_KEY_ID=your-key
WASABI_SECRET_ACCESS_KEY=your-secret
WASABI_REGION=us-east-1
WASABI_SERVICE_URL=https://s3.wasabisys.com
WASABI_S3_BUCKET=gauzy-files

# Cloudinary
CLOUDINARY_CLOUD_NAME=your-cloud
CLOUDINARY_API_KEY=your-key
CLOUDINARY_API_SECRET=your-secret

# DigitalOcean Spaces
DIGITALOCEAN_ACCESS_KEY_ID=your-key
DIGITALOCEAN_SECRET_ACCESS_KEY=your-secret
DIGITALOCEAN_REGION=nyc3
DIGITALOCEAN_S3_BUCKET=gauzy-files
DIGITALOCEAN_SERVICE_URL=https://nyc3.digitaloceanspaces.com

Architectureโ€‹

Upload Request
โ”‚
โ”œโ”€โ”€ FileStorageFactory
โ”‚ โ”œโ”€โ”€ Selects provider based on FILE_PROVIDER
โ”‚ โ””โ”€โ”€ Returns provider-specific storage instance
โ”‚
โ”œโ”€โ”€ Provider Instance
โ”‚ โ”œโ”€โ”€ upload(file) โ†’ URL
โ”‚ โ”œโ”€โ”€ download(key) โ†’ Buffer
โ”‚ โ”œโ”€โ”€ delete(key) โ†’ void
โ”‚ โ””โ”€โ”€ getSignedUrl(key) โ†’ URL
โ”‚
โ””โ”€โ”€ Response with file URL

Stored File Typesโ€‹

TypeUsageTypical Size
ScreenshotsTime tracking proof50-500 KB
Profile imagesEmployee avatars10-200 KB
DocumentsResumes, contracts100 KB - 10 MB
Invoice PDFsGenerated invoices50-500 KB
ExportsData export files1-100 MB