Articles

L’upload d’images paraît simple — jusqu’à ce que les cas limites apparaissent.

1 min de lecture

J’ai récemment publié un petit paquet npm nommé browser-image-guard. Il est né d’un problème que je rencontrais sans cesse en construisant des flux d’upload d’images.

Une porte de tri accepte un fichier image aux encoches adaptées et fait tomber un fichier au bord dentelé dans un bac de rejet.

Au début, l’upload paraît simple : choisir un fichier, le compresser, l’envoyer au backend. Puis les cas limites arrivent. Des fichiers aux types MIME falsifiés. Les utilisateurs d’iPhone envoient des images HEIC. Les métadonnées EXIF et GPS peuvent rester attachées. La compression peut échouer dans un Web Worker. Les anciens navigateurs mobiles peuvent rester bloqués en chargement. Des règles CSP strictes peuvent empêcher complètement le worker de fonctionner.

J’avais déjà construit un pipeline fiable pour ça dans un de mes projets, alors je l’ai extrait en paquet réutilisable au lieu de maintenir la même logique à deux endroits.

Il gère : la détection du vrai type de fichier par magic bytes, la conversion HEIC/HEIF, la suppression des métadonnées EXIF et GPS, le redimensionnement et la compression, la correction d’orientation, le repli hors worker, des limites strictes de taille de fichier et l’assainissement du nom de fichier.

L’API est volontairement simple : processImage(file). Elle renvoie un JPEG propre et compressé prêt à l’upload, ou lève une erreur typée que l’interface peut associer à un message.

Publication originale (site externe)

Partager cet article