Savoir si un utilisateur à fini de télécharger un fichier

Bonjour à tous,

Récemment j’ai eu la problématique d’effectuer une action uniquement dans l’utilisateur à fini de télécharger un fichier.

Pour résoudre ce problème j’ai du utiliser FileChannel qui permet de savoir exactement où l’on en est dans la lecture du fichier.

La solution est tellement simple qu’elle en est élégante : il suffit de overrider la méthode close de FileInputStream

Enfaîte, la méthode close est appelé quand la connexion est close. Si la position du fileChannel est égale à la taille totale, cela veux dire que le téléchargement à été terminé (tout le fichier à été lu).

Hors si la position n’est pas égale à la taille, c’est que la connexion à été close par le client avant la fin du téléchargement (téléchargement annulé par l’utilisateur).