← Retour à la marketplaceVoir les projets →
🗂️
Gestion Fichiers
Upload, stockage et gestion des fichiers (local ou S3) avec URLs signées.
InfrastructureSimple~3 joursv1.1.0
Module de gestion des fichiers avec upload sécurisé (validation type/taille), stockage local ou S3 compatible (Minio, AWS S3, Cloudflare R2), URLs signées, redimensionnement d'images et purge automatique.
filesuploads3storageimages
Dépendances requises :
📋 Schéma Prisma
// === Module Gestion Fichiers ===
model StoredFile {
id String @id @default(cuid())
filename String
originalName String
mimeType String
size Int
storageKey String @unique // chemin dans le bucket ou filesystem
bucket String?
uploadedBy String?
isPublic Boolean @default(false)
expiresAt DateTime?
createdAt DateTime @default(now())
@@map("stored_files")
}🔌 Endpoints API
## API Gestion Fichiers POST /api/files/upload # Upload multipart (auth requis) GET /api/files/:id # Métadonnées du fichier GET /api/files/:id/url # URL signée temporaire (ou directe si public) DELETE /api/files/:id # Supprimer GET /api/files # Liste des fichiers uploadés par l'user
🛠️ Guide d'implémentation
## Implémentation Gestion Fichiers ### Dépendances (choisir) ```bash npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner # S3/Minio ``` ### Étape 1 — Service de stockage Créer src/lib/storage/service.ts avec une interface: ```typescript async function uploadFile(file: File, options?: UploadOptions): Promise<StoredFile> async function getSignedUrl(key: string, expiresIn?: number): Promise<string> async function deleteFile(key: string): Promise<void> ``` ### Étape 2 — Validation sécurisée Valider TOUJOURS le type MIME côté serveur (pas seulement l'extension). Limite de taille configurable. Scan antivirus en option. ### Étape 3 — Mode local (dev) vs S3 (prod) Basculer via variable d'environnement STORAGE_PROVIDER=local|s3 ### Variables d'environnement ``` STORAGE_PROVIDER=s3 S3_ENDPOINT=https://s3.amazonaws.com S3_BUCKET=mon-bucket S3_ACCESS_KEY=xxx S3_SECRET_KEY=xxx S3_REGION=eu-west-3 ```
Prêt à installer ce module ?
Ajoutez-le à un projet existant depuis la page modules du projet.