Je ne suis pas sûr que cela soit possible en utilisant les technologies Web standard.
Je souhaite que l'utilisateur puisse télécharger plusieurs fichiers en une seule action. C'est-à-dire cliquez sur les cases à cocher en regard des fichiers, puis récupérez tous les fichiers qui ont été vérifiés.
Est-ce possible - si oui, quelle stratégie de base recommandez-vous. Je sais que je peux utiliser la technologie des comètes pour créer des événements côté serveur qui déclenchent une HttpResponse, mais j'espère qu'il existe un moyen plus simple.
la source
link.setAttribute('download', null);
j'ai renommé tous mes fichiers en null.link.setAttribute('download',filename)
intérieur de la boucle. Cela vous permet de nommer les fichiers comme vous le souhaitez. De plus, je pense qu'il doit s'agir du nom de fichier uniquement sans inclure l'URL. J'ai fini par envoyer deux tableaux: un avec l'URL complète et un avec juste le nom de fichier.Minecraft.jar
.Vous pouvez créer un ensemble temporaire d'iframes cachés, lancer le téléchargement par GET ou POST à l'intérieur d'eux, attendre que les téléchargements commencent et supprimer les iframes:
Ou, sans jQuery:
la source
setTimeout()
?Cette solution fonctionne sur tous les navigateurs et ne déclenche pas d'avertissements. Plutôt que de créer un
iframe
, nous créons ici un lien pour chaque fichier. Cela empêche les messages d'avertissement de s'afficher.Pour gérer la partie en boucle, nous utilisons
setTimeout
, ce qui est nécessaire pour que cela fonctionne dans IE.la source
Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
.Le moyen le plus simple serait de servir les multiples fichiers regroupés dans un fichier ZIP.
Je suppose que vous pouvez lancer plusieurs téléchargements de fichiers en utilisant un tas d'iframes ou de fenêtres contextuelles, mais du point de vue de la convivialité, un fichier ZIP est toujours meilleur. Qui veut cliquer sur dix boîtes de dialogue «Enregistrer sous» que le navigateur affichera?
la source
Je suis d'accord qu'un fichier zip est une solution plus soignée ... Mais si vous devez pousser plusieurs fichiers, voici la solution que j'ai trouvée. Cela fonctionne dans IE 9 et plus (peut-être la version inférieure aussi - je ne l'ai pas testé), Firefox, Safari et Chrome. Chrome affichera un message à l'utilisateur pour obtenir son accord pour télécharger plusieurs fichiers la première fois que votre site l'utilisera.
Le seul effet secondaire de cette technique est que l'utilisateur verra un délai entre la soumission et l'affichage de la boîte de dialogue de téléchargement. Pour minimiser cet effet, je vous suggère d'utiliser la technique décrite ici et sur cette question Détecter quand le navigateur reçoit un téléchargement de fichier qui consiste à placer un cookie avec votre fichier pour savoir qu'il a commencé le téléchargement. Vous devrez vérifier ce cookie côté client et l'envoyer côté serveur. N'oubliez pas de définir le chemin approprié pour votre cookie ou vous ne le verrez peut-être pas. Vous devrez également adapter la solution pour le téléchargement de plusieurs fichiers.
la source
Une version jQuery de l'iframe répond:
la source
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
Cependant, cela ne fonctionne pas pour le téléchargement de fichiers image.Solution angulaire:
exemple de travail: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
la source
Pour améliorer la réponse de @Dmitry Nogin: cela a fonctionné dans mon cas.
Cependant, il n'a pas été testé, car je ne suis pas sûr du fonctionnement du dialogue de fichier sur diverses combinaisons OS / navigateur. (Ainsi wiki communautaire.)
la source
Cela fonctionne dans tous les navigateurs (IE11, Firefox, Edge, Chrome et Chrome Mobile) Mes documents sont dans plusieurs éléments sélectionnés. Les navigateurs semblent avoir des problèmes lorsque vous essayez de le faire trop vite ... J'ai donc utilisé un délai d'attente.
C'est une solution qui utilise les promesses:
la source
De loin la solution la plus simple (au moins dans ubuntu / linux):
Fonctionne comme un charme.
la source
Pour résoudre ce problème, j'ai créé une bibliothèque JS pour diffuser plusieurs fichiers directement dans un zip côté client. La principale caractéristique unique est qu'il n'a pas de limite de taille de la mémoire (tout est diffusé) ni de format zip (il utilise zip64 si le contenu est supérieur à 4 Go).
Comme il ne fait pas de compression, il est également très performant.
Trouvez "downzip" sur npm ou github !
la source
Le script suivant a fait ce travail avec élégance.
la source
Je cherche une solution pour ce faire, mais décompresser les fichiers en javascript n'était pas aussi propre que je le souhaitais. J'ai décidé d'encapsuler les fichiers dans un seul fichier SVG.
Si vous avez les fichiers stockés sur le serveur (ce n'est pas le cas), vous pouvez simplement définir le href dans le SVG.
Dans mon cas, je vais convertir les fichiers en base64 et les intégrer dans le SVG.
Edit: Le SVG fonctionnait très bien. Si vous ne souhaitez télécharger que les fichiers, le format ZIP peut être préférable. Si vous allez afficher les fichiers, SVG semble supérieur.
la source
Lors de l'utilisation de composants Ajax, il est possible de démarrer plusieurs téléchargements. Par conséquent, vous devez utiliser https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
Ajoutez une instance d'AJAXDownload à votre page ou autre. Créez un AjaxButton et remplacez onSubmit. Créez un AbstractAjaxTimerBehavior et lancez le téléchargement.
Bon téléchargement!
la source
Sous le code fonctionne à 100%.
Étape 1 : collez le code ci-dessous dans le fichier index.html
Étape 2 : Collez le code ci-dessous dans le fichier index.js
REMARQUE : assurez-vous que les trois fichiers à télécharger seront placés dans le même dossier avec les fichiers angularProject / index.html ou angularProject / index.js .
la source
Obtenir la liste des URL avec l'appel ajax, puis utiliser le plugin jquery pour télécharger plusieurs fichiers en parallèle.
la source
Voici comment je fais cela. J'ouvre plusieurs ZIP mais aussi d'autres types de données (j'exporte le projet en PDF et en même temps de nombreux ZIP avec document).
Je copie juste une partie de mon code. L'appel à partir d'un bouton dans une liste:
Donc un appel basique à une routine JS (règles Vanilla!). voici la routine JS:
L'astuce est de NE PAS donner le lien direct du fichier ZIP mais de l'envoyer au navigateur. Comme ça:
la source
la source