Téléversements privés
Configurez des uploads S3 privés avec politique, entitlement, quota, checksum et suppression durable.
Synchronisé avec le commit
2a1a04adu starter.
Utilisez cette fonction lorsque votre produit doit conserver des avatars, documents, imports ou fichiers générés sans les rendre publics ni faire transiter chaque octet par le serveur Next.js. À la fin, une personne connectée doit pouvoir charger, télécharger et supprimer un fichier depuis Compte → Fichiers, sans qu’une autre organisation puisse y accéder.
Choisir la politique de stockage adaptée
- Docker Compose utilise Garage comme défaut local open source maintenu et crée le bucket privé. Cloudflare R2 et AWS S3 sont des choix production courants.
minioreste supporté pour les équipes qui l’exploitent, mais n’est plus le défaut livré. Tous partagent le même adaptateur. - Choisissez
generalpour des fichiers mixtes,imagespour les images avec une limite de politique de 10 Mo,documentspour les fichiers bureautiques et texte, ouverifiedlorsque le navigateur doit fournir un SHA-256. - La limite réelle est la plus petite entre le plan,
STORAGE_MAX_UPLOAD_MBet la politique. Gardez le bucket privé ; le modèle livré utilise des URL signées de courte durée.
Prêt pour la production signifie : le parcours UI fonctionne, CORS n’accepte que vos origines, une URL publique directe échoue, l’accès inter-organisation est refusé et cron supprime finalement l’objet d’un fichier effacé.
Définissez STORAGE_PROVIDER à garage, s3, r2 ou minio, puis bucket, région, endpoint et identifiants. Les objets restent privés et le navigateur ne reçoit que des URL signées courtes. L’exemple image utilise le même cycle privé.
Contrat
POST /api/storage/uploadsvalide organisation,storage.upload, politique (general,images,documents,verified), type et le minimum des limites plan/environnement/politique ; le quota est réservé atomiquement.- Le navigateur PUT directement ; XHR ne sert qu’à la progression.
POST /api/storage/uploads/completevérifie métadonnées et SHA-256 optionnel puis active la ligne.GET /api/storage/files/[uuid]?download=1fournit une URL limitée à l’organisation.DELETE /api/storage/files/[uuid]fait un soft-delete et planifiestorage_object_deletedurable.
Un upload abandonné libère sa réservation après une heure. La suppression réessaie par la file : cron doit tourner. Le service génère les clés ; le client ne choisit pas la clé bucket.
Testez flux complet, MIME/checksum invalide, concurrence quota, URL expirée, accès inter-organisation, reprise et nettoyage. Voir docs/storage-providers.md du starter pour CORS.
Étape suivante : fiabilisez suppression et nettoyage avec Tâches durables et readiness.
Registre de crédits d’organisation
Choisissez comment mesurer l’usage, puis attribuez, dépensez, expirez et remboursez les crédits mutualisés en sécurité.
Content Studio et email marketing
Exploitez l’application Payload séparée, gardez les données clients dans le SaaS et lancez des campagnes fondées sur le consentement.