1
0

SOLUTION_STORAGE_FICHIERS.md 2.5 KB

Solution pour le stockage des fichiers dans static/uploads/

Problème

Les fichiers uploadés via le modèle Fichier étaient sauvegardés dans media/static/uploads/ au lieu de static/uploads/, car Django ajoute automatiquement MEDIA_ROOT devant le chemin.

Solution implémentée

Création d'un custom storage qui sauvegarde directement dans static/uploads/ sans utiliser MEDIA_ROOT.

Fichiers modifiés/créés

1. Nouveau storage personnalisé

Fichier: core/storage/backends.py

  • Storage qui pointe vers le dossier static/ au lieu de media/
  • Génère automatiquement les URLs avec /static/ comme base

2. Modèle Fichier mis à jour

Fichier: core/models.py

  • Import du StaticStorage
  • Modification du champ f_fichier pour utiliser le storage personnalisé

    f_fichier = models.FileField("Fichier", upload_to='uploads/', storage=StaticStorage())
    

Résultat

  • ✅ Les nouveaux fichiers uploadés iront dans static/uploads/
  • ✅ Les URLs générées seront /static/uploads/nom_fichier
  • ✅ Compatible avec vos liens historiques dans les articles
  • ✅ Pas besoin de modifier les liens existants

Migration

Si Django n'est pas installé localement

Vous devrez faire la migration sur votre serveur de production ou dans votre environnement avec Django installé :

python3 manage.py makemigrations core
python3 manage.py migrate core

Si vous utilisez Docker

docker-compose exec web python manage.py makemigrations core
docker-compose exec web python manage.py migrate core

Test

Pour tester que le storage fonctionne, exécutez :

python3 test_storage.py

Notes importantes

  1. Les anciens fichiers dans media/static/uploads/ resteront là où ils sont
  2. Les nouveaux fichiers iront directement dans static/uploads/
  3. Vous pourrez déplacer manuellement les anciens fichiers si nécessaire :

    mv media/static/uploads/* static/uploads/
    

Avantages de cette solution

  • ✅ Préserve les liens historiques
  • ✅ Solution propre avec un storage personnalisé
  • ✅ Facile à maintenir
  • ✅ Compatible avec collectstatic (les fichiers restent dans static/)

Alternative (si besoin)

Si vous voulez que Django gère les fichiers via MEDIA au lieu de STATIC (recommandé pour la production), vous devrez :

  1. Utiliser le MEDIA_ROOT standard
  2. Créer un script de remplacement dans vos articles pour changer /static/uploads/ en /media/uploads/