2026-04-28 12:22:24 +02:00

2.9 KiB
Raw Blame History

Pipeline médias Strapi → dossiers par section → WebP → ré-upload optionnel

Répertoire de travail (lourd) : strapi_extraction/extract/media-sync-work/ — ignoré par Git (/.gitignore).

Prérequis

  • Node 18+
  • Dépendance sharp installée depuis la racine (npm install déjà fait si le dépôt à jour).

Variables optionnelles

Variable Rôle
STRAPI_URL Origine Strapi sans /api (défaut depuis NEXT_PUBLIC_API_URL ou prod).
STRAPI_API_TOKEN Seulement pour 04-upload-replace.js --execute. Jeton créé dans Strapi → Settings → API Tokens (droits lecture + Upload + mise à jour des CT concernés). Ne pas committer ce jeton.

Chemins .env.local à la racine et cmsbackend/.env sont chargés par les scripts (config.js ou 04).

Chaîne normale

# depuis la racine du repo J:\my-next-site

npm run media:inventory        # 01 — liste tous les médias utilisés → media-inventory.json

npm run media:download           # 02 — téléchargement physique par section sous downloaded/

npm run media:webp               # 03 — conversion/copies sous webp/

npm run media:upload             # 04 — dry-run uniquement (aucune mutation)

# Mutation CMS (**attention**) après lecture cidessous :

$env:STRAPI_API_TOKEN="<jeton>"
node strapi_extraction/media-sync/04-upload-replace.js --execute

Organisation des dossiers

  • downloaded/{section}/{slug-du-contenu}/{fileId}_{nom-fichier}
    Sections : portfolio, competences, home, realisation-ias, glossaire.
  • webp/... même structure, avec .webp (ou .svg copié en clair).

Les fichiers média uniques sont dédupliqués par fileId : une seule fois sur disque, plusieurs lignes dans linventaire peuvent référencer le même téléchargement.

Erreur « Cannot convert argument to a ByteString » (upload)

Les noms de fichiers sur disque peuvent contenir des caractères Unicode (tirets fins, flèches dans des noms AI, etc.). Le FormData HTTP naccepte quun nom de fichier ASCII dans len-tête multipart ; le script 04-upload-replace.js renomme donc en interne chaque envoi en upload-{fileId}.webp (voir asciiUploadName dans le fichier). Relance --execute après mise à jour du script.

Avant le --execute sur la prod

  1. Tester dabord contre une instance Strapi locale (ex. importer la base vers cmsbackend, npm run develop, puis $env:STRAPI_URL="http://localhost:1337" et un jeton local).
  2. Sauvegarder la base et /public/uploads.
  3. Lire le préambule dans 04-upload-replace.js ; le script vérifie que lancien id correspond encore avant remplacement pour limiter les corruptions.

Si létape ré-upload vous suffit après conversion manuelle

Vous pouvez aussi importer uniquement les WebP depuis ladmin Strapi puis réassigner les champs à la main ; ce dépôt ne vous oblige pas à utiliser 04.