Afficher une barre de progression pour le téléchargement de fichiers à l'aide de XHR2/AJAX
Je suis en train de télécharger des fichiers à l'aide d'Ajax et de montrer une coutume barre de progression du téléchargement.
Le problème est que je ne peux pas comprendre comment le faire. J'ai écrit le code pour le journal le progrès, mais ne sais pas comment faire pour lancer le téléchargement.
REMARQUE: Les fichiers sont de types différents.
Merci d'avance.
JS
//Downloading of files
filelist.on('click', '.download_link', function(e){
e.preventDefault();
var id = $(this).data('id');
$(this).parent().addClass("download_start");
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
//Handle Download Progress
xhr.addEventListener("progress", function (evt) {
if(evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
}
}, false);
return xhr;
},
complete: function () {
console.log("Request finished");
}
})
});
HTML et PHP
<li>
<div class="f_icon"><img src="' . $ico_path . '"></div>
<div class="left_wing">
<div class="progressbar"></div>
<a class="download_link" href="#" id="'.$file_id.'"><div class="f_name">' . $full_file_name . '</div></a>
<div class="f_time_size">' . date("M d, Y", $file_upload_time) . ' • ' . human_filesize($file_size) . '</div>
</div>
<div class="right_wing">
<div class="f_delete">
<a class="btn btn-danger" href="#" aria-label="Delete" data-id="'.$file_id.'" data-filename="'.$full_file_name.'"><i class="fa fa-trash-o fa-lg" aria-hidden="true" title="Delete this?"></i>
</a>
</div>
</div>
</li>
Comment êtes-vous d'envoyer le fichier que vous avez téléchargé à l'utilisateur?
Si vous vous demandez comment suis-je télécharger un fichier, et bien, c'est ce que je veux savoir comment dois-je télécharger le fichier.
Il a regardé comme si vous étiez à se demander comment montrer le progrès, mais, à la lecture, c'est un supplément pour le téléchargement. Réponse Simple: ne pas utiliser de l'ajax pour télécharger un fichier, utilisez le navigateur.
Oui, qui peut évidemment être fait, mais j'ai besoin d'afficher la progression du téléchargement car c'est la partie de l'INTERFACE utilisateur
Il y a une réponse ici stackoverflow.com/questions/399641/ajax-page-download-progress mais une meilleure discussion ici stackoverflow.com/questions/76976/...
Si vous vous demandez comment suis-je télécharger un fichier, et bien, c'est ce que je veux savoir comment dois-je télécharger le fichier.
Il a regardé comme si vous étiez à se demander comment montrer le progrès, mais, à la lecture, c'est un supplément pour le téléchargement. Réponse Simple: ne pas utiliser de l'ajax pour télécharger un fichier, utilisez le navigateur.
<a href='url to download' target='_blank'>download</a>
Oui, qui peut évidemment être fait, mais j'ai besoin d'afficher la progression du téléchargement car c'est la partie de l'INTERFACE utilisateur
Il y a une réponse ici stackoverflow.com/questions/399641/ajax-page-download-progress mais une meilleure discussion ici stackoverflow.com/questions/76976/...
OriginalL'auteur Ayan | 2016-09-20
Vous devez vous connecter pour publier un commentaire.
Si vous voulez montrer à l'utilisateur une barre de progression du téléchargement de processus, vous devez faire le téléchargement dans le xmlhttprequest. L'un des problèmes, c'est que si vos fichiers sont gros, ils seront sauvés dans la mémoire du navigateur avant que le navigateur va les écrire sur le disque (en cas d'utilisation régulière de télécharger des fichiers sont en train d'être enregistrées directement sur le disque, ce qui permet d'économiser beaucoup de mémoire sur les gros fichiers).
Une autre chose importante à noter - pour que les
lengthComputable
pour être vrai, votre serveur doit envoyer leContent-Length
- tête avec la taille du fichier.Voici le code javascript:
Et voici un exemple pour le code php, vous pouvez utiliser:
merci pour ce commentaire 🙂
cela m'a beaucoup aidé pendant le suivi de la vitesse de téléchargement par MO
content que cela m'a aidé 🙂
sain et utile exemple. Merci beaucoup.
OriginalL'auteur Dekel