2 votes

Fineuploader relance le téléchargement en cas de réponse tardive du serveur.

J'ai rencontré un problème très bizarre et je cherche à savoir ce qu'il en est.

Le contexte : le téléchargement de fichiers volumineux (jusqu'à 100 Mo) dans WordPress. Dans le cadre de ce processus, une longue tâche s'exécute également du côté serveur (pousser le fichier vers DropBox via leur API en utilisant le chunking), la réponse est donc inévitablement retardée pour les gros fichiers. Cette partie peut être simulée facilement en exécutant la fonction PHP sleep() fonction.

Question : Fineuploader arrive à 100%, montre le waitingForResponse pendant environ 15 secondes (le serveur n'a toujours pas terminé le traitement à ce stade), puis il recommence le téléchargement depuis le début. Après le deuxième essai, il affirme n'avoir rien reçu du serveur et indique que le téléchargement a échoué. Messages de débogage de la console :

[FineUploader] xhr - server response received for 0
XMLHttpRequest { readyState=4, timeout=0, withCredentials=false, more...}
[FineUploader] responseText = 

Les journaux du serveur montrent deux et le serveur renvoie deux fois le JSON de réussite ; au final, il y a deux fichiers sur le serveur.

Question : Que puis-je faire pour résoudre ce problème ? Puis-je renvoyer régulièrement quelque chose à FineUploader pour m'assurer qu'il n'y a pas de dépassement de délai ?

2voto

Ray Nicholus Points 6529

Fine Uploader n'a pas de mécanisme de temporisation en place. Si vous voyez un délai d'attente, c'est soit le navigateur lui-même qui force un délai d'attente, soit un appareil entre le navigateur et votre serveur.

J'ai rencontré ce problème dans le passé en utilisant AWS (Amazon Web Services). Comme dans votre cas, j'ai dû effectuer un traitement côté serveur après avoir reçu le fichier entier avant de renvoyer la réponse. Pendant ce traitement, bien sûr, il n'y avait pas de trafic TCP. Il s'est avéré que l'ELB (Elastic Load Balancer) avait un délai d'inactivité TCP de 1 minute. Le traitement des fichiers volumineux dépassait cette valeur, ce qui amenait l'ELB à mettre fin à la demande.

Vous ne pouvez renvoyer une réponse à Fine Uploader que lorsque la demande/le téléchargement est terminé(e). Si vous souhaitez vraiment attendre que le traitement côté serveur soit terminé avant de renvoyer une réponse "réussie" à Fine Uploader, vous devez déterminer ce qui met fin à votre requête. Vos options sont probablement soit d'augmenter le délai d'attente sur le périphérique qui met fin à votre requête, soit de déléguer le traitement à un thread séparé côté serveur et de renvoyer la réponse de succès dès que tous les octets du fichier ont été reçus et sont en ordre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X