Barre de progression pour uploads

Barre de progression pour uploads

Composant et bonnes pratiques pour afficher la progression pendant les uploads

Affichez une progression claire, réactive et accessible lors d’envois de fichiers. Ce guide détaille les workflows, l’expérience visuelle, la synchronisation des événements d’upload, la gestion des erreurs et l’accessibilité ARIA.

Couverture

Barre de progression (#progressBar)

Affichage visuel de l’avancement en pourcentage, avec label et indicateur aria.

Synchronisation client ↔ upload

Mettre à jour la barre à chaque événement de progression et gérer les cas sans info de taille totale.

État & gestion d’erreurs

Affichage des erreurs, bouton d’annulation, resets et comportements de retry.

Accessibilité (ARIA)

Rendre la progression lisible par les lecteurs d’écran et respectueuse des préférences de mouvement réduites.

Réactivité visuelle

Animations fluides, transition de pourcentage, loaders et affichage alternatif quand l’estimation manque.

Bonnes pratiques

Conseils UX, throttling des updates, messages utilisateurs et tests à prévoir.

Tip — garder l'utilisateur informé

Affichez toujours un message textuel clair (ex. “Envoi 42 % — 3,2 Mo / 7,6 Mo”) en complément de la barre : certains utilisateurs ne perçoivent pas l’animation.

Introduction Vous trouverez ici des workflows pas à pas pour intégrer une barre de progression pour les uploads, la synchroniser avec les événements émis pendant l’envoi, gérer les annulations/erreurs et garantir une bonne accessibilité. Le loader et la barre sont contrôlés côté front : ils se masquent automatiquement à la fin de l’opération ou via callbacks personnalisés.

Workflow 1 — Ajouter la barre de progression à l'interface

1

Étape 1 — Prévoir un emplacement visible

Choisissez un emplacement clair : en haut d’un modal d’upload, sous le bouton de sélection de fichier, ou en overlay global si l’upload bloque l’interface. Privilégiez un emplacement cohérent sur toutes les pages où l’on peut uploader.

2

Étape 2 — Composants visuels à inclure

Préparez : 1) un conteneur visible pour la barre, 2) une zone texte pour le pourcentage et les tailles (ex. “42 % — 1.2 / 3.0 Mo”), 3) un bouton Annuler et 4) un petit message d’état (upload en cours / réussi / erreur).

3

Étape 3 — État initial et comportement

La barre doit être cachée par défaut. Au lancement de l’upload, affichez-la, initialisez la valeur à 0 % et placez le focus (optionnel) sur le bouton d’annulation si l’action est longue.

4

Étape 4 — Fin d'opération

À succès : afficher brièvement un état “Terminé” (ex. 100 % + coche), puis masquer automatiquement après un délai court (500–1500 ms) ou laisser l’utilisateur fermer la notification. En cas d’erreur ou d’annulation, afficher message et proposer retry.

Tip — transitions et perception

Utilisez une transition CSS douce pour la largeur de la barre (par ex. 150–300 ms) : ça donne l’impression d’un progrès fluide sans distraire. Évitez des animations trop lentes qui masquent la réalité du transfert.

Workflow 2 — Synchroniser la progression côté client avec l'événement d'upload

1

Étape 1 — Lancer l’upload et exposer les événements de progression

Au démarrage, démarrez l’envoi et abonnez la barre aux événements de progression fournis par le mécanisme d’envoi (événements fréquents : mettez en place un throttling/taux minimal de rafraîchissement pour éviter un rendu excessif).

2

Étape 2 — Calculer le pourcentage

Si la taille totale est connue : pourcentage = (octets envoyés / octets totaux) × 100. Affichez aussi les tailles (envoyées / totales) arrondies à 1 ou 2 décimales pour lisibilité.

3

Étape 3 — Throttling et smoothing

Ne mettez pas l’UI à jour à chaque événement si ceux-ci sont très fréquents. Exemple de stratégie : mettre à jour au max 10 fois par seconde, ou uniquement si la progression a changé d’au moins 1 %.

4

Étape 4 — Cas sans taille totale (indéterminé)

Quand la taille totale n’est pas fournie, affichez un indicateur indéterminé (animation en boucle) ou appliquez une progression estimée : démarrer par une animation rapide vers 25–40 %, puis ralentir et ajuster quand vous recevez la vraie progression ou la confirmation de fin.

5

Étape 5 — Synchronisation finale

Quand l’opération signale la fin, forcez la barre à 100 %, affichez l’état de réussite, puis déclenchez le callback de fin (masquage, refresh de la liste, notification). Assurez-vous que le callback est exécuté une seule fois même si plusieurs événements “fin” arrivent.

Tip — éviter les sauts de pourcentage

Si la progression remonte (ex. 70 % → 65 %) à cause d’une estimation initiale, préférez lisser la valeur visuelle plutôt que d’afficher un recul brutal : décrémentez progressivement ou expliquez l’ajustement dans le message de statut.

Workflow 3 — Gérer erreurs, timeouts et annulation

1

Étape 1 — Prévoir un bouton Annuler

Ajoutez un bouton Annuler visible pendant l’upload. Il doit : 1) stopper l’envoi, 2) remettre la barre à l’état caché ou “Annulé”, 3) rétablir l’UI (réactiver boutons, réinitialiser form).

2

Étape 2 — Détecter erreurs et timeout

Sur erreur réseau ou serveur, remplacez l’état de la barre par “Erreur” et affichez un message explicite (ex. “Échec : connexion perdue”). Proposez un bouton Réessayer et affichez un log simplifié (nom du fichier, taille).

3

Étape 3 — Nettoyage et rollback

Après annulation/erreur, supprimez tout état temporaire (fichiers en cours) et réinitialisez la barre. Évitez de conserver valeurs partielles visibles.

4

Étape 4 — Réessai et stratégie backoff

Proposez un retry manuel. Si vous offrez des retries automatiques, appliquez un backoff exponentiel court et limitez le nombre de tentatives pour éviter de saturer la connexion.

5

Étape 5 — Feedback utilisateur

Informez l’utilisateur de l’action recommandée : “Réessayez”, “Vérifiez la connexion”, ou “Contactez le support”. Utilisez toasts ou message inline selon le contexte.

GOTCHA — fichiers 0 octet et uploads chunkés

Les fichiers de taille 0 ou les uploads chunkés (segmentés) peuvent fournir des événements de progression incohérents. Testez ces cas : si la taille totale n’est pas fiable, basculez en mode indéterminé ou utilisez une stratégie d’estimation robuste pour éviter un affichage erratique.

Workflow 4 — Accessibilité (ARIA) et bonnes pratiques pour lecteurs d'écran

1

Étape 1 — Donner un rôle et attributs ARIA

Assignez role=“progressbar” au conteneur visible et renseignez aria-valuemin=“0”, aria-valuemax=“100” et aria-valuenow=“[valeur actuelle]”. Ajoutez aria-label ou aria-labelledby pour décrire l’objet, par ex. “Envoi de la pièce jointe”.

2

Étape 2 — Région live pour messages

Ajoutez une région aria-live=“polite” (ou “assertive” pour erreurs critiques) qui annonce la fin, l’erreur ou l’annulation. Exemple : “Upload terminé”, “Échec de l’envoi”.

3

Étape 3 — Respecter prefers-reduced-motion

Pour les utilisateurs ayant réduit le mouvement, remplacez animations complexes par changements instantanés ou transitions très rapides. Vérifiez la préférence via CSS média query dédiée et ajustez les animations.

4

Étape 4 — Couleurs et contraste

Assurez un contraste élevé entre la barre remplie et le fond (ratio recommandé ≥ 4.5:1 pour texte). Ne vous fiez pas uniquement à la couleur : ajoutez une icône ou un label textuel.

5

Étape 5 — Keyboard & focus

Permettez au bouton Annuler d’être accessible au clavier, et faites en sorte que la barre puisse être lue par tabulation si utile (ex. focus sur la région live après fin).

  • Idéal si le navigateur/mécanisme d’envoi transmet des événements de progression (taille totale connue).
  • Avantages : affichage précis du pourcentage, estimation des temps restants possible.
  • Inconvénients : dépend du support du client et du serveur.
  • Recommandation : throttler les mises à jour et afficher tailles envoyées.
  • Utilisé quand la progression n’est pas fournie (ex : certains transferts backend ou proxys).
  • Méthode : animation indéterminée ou progression heuristique (0→40 % rapide, puis lente jusqu’à la fin).
  • Avantages : donne une rétroaction visuelle même sans données.
  • Inconvénients : moins précise, risque d’ajustements brusques à la fin.
  • Recommandation : combiner avec messages textuels et indiquer clairement “progrès estimé”.

Avant (sans barre)

  • Utilisateur incertain de l’état d’upload.
  • Récupération d’erreurs moins visible.
  • Risque d’interruption involontaire de l’utilisateur.

Après (avec barre)

  • Feedback immédiat et confiance utilisateur accrue.
  • Possibilité d’annuler et de réessayer facilement.
  • Meilleure gestion des erreurs et des attentes.

Tip — tester sur conditions réelles

Testez vos uploads sur connexions lentes, mobiles et avec fichiers volumineux. Mesurez la fréquence des événements pour ajuster le throttling et la sensibilité des animations.

Limites côté client

La précision dépend du navigateur et du mécanisme de transfert. Si vous ne recevez pas d’événements ou si le serveur ne prend pas en charge le reporting de progression, prévoyez une expérience alternative (indéterminée ou estimative).

Frequently Asked Questions

Règle importante

Le loader et la barre restent contrôlés côté front. Ils doivent se cacher automatiquement à la fin de l’opération ou via callbacks explicitement appelés depuis la logique d’upload.

Voir la section complète 'Prévisualisation & Loader UI'

Consultez les autres composants d’affichage d’état (spinners, overlays, thumbnails) pour harmoniser l’UX des uploads dans votre application.

Sinao

Le logiciel de comptabilité simple et puissant. Prenez la main sur vos finances, votre trésorerie et documents pour piloter votre entreprise.

Powered by DeployIt

© 2026 Sinao