2 Système-de-fichiers
Claude edited this page 2026-05-16 12:33:43 +02:00

Système de fichiers

NoxIRC dispose d'un système de stockage extensible via des providers interchangeables.

Architecture

StorageProviderRegistry
├── local   (LocalStorageProvider)    ← actif par défaut
├── imgur   (FunctionStorageProvider) ← enregistré par un plugin
└── s3      (FunctionStorageProvider) ← enregistré par un plugin

Le registry maintient un provider actif (défaut système) et permet aux utilisateurs de choisir parmi les providers disponibles au moment de l'upload.


Provider local

Stocke les fichiers dans ./uploads/{user_id}/{uuid}.ext.

Configuration (variables d'environnement) :

Variable Défaut Description
UPLOAD_MAX_SIZE_MB 10.0 Taille maximale d'un fichier
UPLOAD_ALLOWED_TYPES image/jpeg,image/png,image/gif,image/webp,application/pdf,application/zip,text/plain Types MIME acceptés
PUBLIC_URL (vide) Préfixe pour les URLs publiques

Si PUBLIC_URL est vide, les URLs sont relatives (/files/uuid.jpg). Si PUBLIC_URL est défini, les URLs sont absolues (https://noxirc.example.com/files/uuid.jpg).


Désactiver le stockage local

curl -X PUT /api/admin/settings \
  -H "Authorization: Bearer <token>" \
  -d '{"key": "local_storage_enabled", "value": "false"}'

Si désactivé et qu'aucun plugin ne fournit de provider, l'upload est bloqué.


API endpoints

Endpoint Description
GET /api/files/providers Liste les providers disponibles
POST /api/files/upload?provider=<name> Upload vers un provider spécifique
GET /api/files Liste les fichiers de l'utilisateur
GET /files/{uuid}.ext Servir un fichier
DELETE /api/files/{uuid} Supprimer un fichier

Préférence utilisateur

Quand plusieurs providers sont disponibles, l'utilisateur choisit son hébergement dans le FilePicker (bouton 📎 dans le chat). Ce choix est persisté et synchronisé entre ses appareils.


Comportement inline / téléchargement

Les types suivants s'affichent dans le navigateur (pas de téléchargement forcé) :

  • Images : image/jpeg, image/png, image/gif, image/webp, image/avif, image/svg+xml
  • Documents : text/plain, application/pdf

Les autres types (zip, etc.) déclenchent un téléchargement.


Ajouter un provider via plugin

Voir Développement-Plugins — section Storage provider.