Télécharger plusieurs fichiers en une seule opération.
Je ne suis pas sûr si cela est possible en utilisant des technologies web standard.
Je veux que l'utilisateur soit capable de télécharger plusieurs fichiers en une seule action. C'est de cliquer sur les cases à cocher à côté des fichiers, puis obtenir tous les fichiers qui ont été vérifiés.
Est-il possible - si oui, quelle stratégie de base recommandez-vous. Je sais que je peux utiliser les comètes de la technologie pour créer un serveur de côté les événements qui déclenchent une HttpResponse mais j'espère qu'il y a un moyen plus simple.
Vous devez vous connecter pour publier un commentaire.
HTTP ne prend pas en charge plus d'un téléchargement de fichier à la fois.
Il y a deux solutions:
JS:
HTML:
link.setAttribute('download', null);
renommé tous mes fichiers à null.link.setAttribute('download',filename)
l'intérieur de la boucle. Cela vous permet de nommer les fichiers que vous voulez. Aussi, je crois qu'il doit être le nom de fichier seulement de ne pas y compris l'URL. J'ai fini par l'envoi de deux tableaux: l'un avec l'URL complète et une avec seulement le nom de fichier.Minecraft.jar
.Vous pouvez créer un ensemble temporaire de caché iframes, d'initier le téléchargement par GET ou POST à l'intérieur, d'attente pour les téléchargements de début et de supprimer les iframes:
Ou sans jQuery:
setTimeout()
?Cette solution fonctionne sur tous les navigateurs, et ne déclenche pas les avertissements. Plutôt que de créer un
iframe
, ici, nous avons crée un lien pour chaque fichier. Cela empêche les messages d'avertissement de popping up.Pour gérer la boucle de la partie, nous utilisons
setTimeout
, ce qui est nécessaire pour qu'il fonctionne dans IE.JS:
HTML:
Plus simple serait de servir de multiples fichiers regroupés dans un fichier ZIP.
Je suppose que vous pourriez lancer plusieurs téléchargements de fichiers à l'aide d'un tas d'images ou des fenêtres pop-up, mais à partir d'un point de vue de l'utilisabilité, un fichier ZIP est encore mieux. Qui veut cliquez sur par le biais de dix "Enregistrer sous" boîte de dialogue, le navigateur devra mettre en place?
JQuery version de l'iframe réponses:
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
Toutefois, cela ne fonctionne pas pour le téléchargement de fichiers d'image.de travail exemple: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
Je suis d'accord qu'un fichier zip est un plus propre solution... Mais si vous avez qu'à appuyer sur plusieurs fichiers, voici la solution que j'ai trouvé. Il fonctionne sous IE 9 et (éventuellement en version basse trop - je n'ai pas testé), Firefox, Chrome et Safari. Chrome affiche un message à l'utilisateur pour obtenir son accord de télécharger plusieurs fichiers à la première fois, votre site de l'utiliser.
Le seul effet secondaire de cette technique, est que l'utilisateur verra un délai entre la soumettre et la boîte de dialogue téléchargement de l'affichage. Pour minimiser cet effet, je vous suggère d'utiliser la technique de décrire ici et sur cette question Détecter lorsque le navigateur reçoit le dossier de téléchargement qui consistent en la définition d'un cookie avec votre fichier pour savoir qu'il a commencé à télécharger. Vous aurez à vérifier pour ce cookie sur le côté client et de l'envoyer sur le serveur. N'oubliez pas de définir le chemin d'accès approprié pour votre cookie ou vous pourriez ne pas le voir. Vous aurez également à adapter la solution pour plusieurs de téléchargement de fichiers.
À améliorer @Dimitri Nogin réponse: cela a fonctionné dans mon cas.
Cependant, il n'est pas testé, car je ne suis pas sûr de savoir comment le fichier de dialogue travaille sur différents OS/navigateur combinaisons. (Donc wiki de la communauté.)
Je suis à la recherche d'une solution pour le faire, mais en ouvrant les fichiers javascript n'était pas aussi propre que je l'ai aimé. J'ai décidé d'encapsuler les fichiers dans un seul fichier SVG.
Si vous avez les fichiers stockés sur le serveur (je n'ai pas), vous pouvez simplement définir le href du SVG.
Dans mon cas, je vais convertir les fichiers en base64 et de les intégrer dans le SVG.
Edit: Le SVG a très bien fonctionné. Si vous allez seulement à télécharger les fichiers, ZIP peut-être mieux. Si vous allez pour afficher les fichiers, puis SVG semble supérieure.
Lors de l'utilisation de composants Ajax, il est possible de lancer plusieurs téléchargements. Par conséquent, vous devez utiliser https://cwiki.apache.org/confluence/display/WICKET/AJAX+mise à jour+et+fichier+téléchargement+dans+un+coup
Ajouter une instance de AJAXDownload sur votre Page ou quoi que ce soit. Créer un AjaxButton et remplacer onSubmit. Créer un AbstractAjaxTimerBehavior et démarrer le téléchargement.
Bon téléchargement!
Code ci-dessous 100% de travail.
Étape 1: Collez code ci-dessous dans index.html fichier
Étape 2: Collez code ci-dessous dans index.js fichier
NOTE : assurez-vous que tous les trois fichiers dont le téléchargement sera placé dans le même dossier avec angularProject/index.html ou angularProject/index.js fichiers.
Cela fonctionne dans tous les navigateurs (IE11, firefox, Edge, Chrome et Chrome Mobile) Mes documents sont en sélectionnez plusieurs éléments. 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 des promesses:
Obtenir la liste des url avec appel ajax et ensuite utiliser plugin jquery pour télécharger plusieurs fichiers en parallèle.
Ici est la façon dont je le fais. - Je ouvrir plusieurs ZIP mais aussi d'autres types de données (je exporter le projet au format PDF et au même moment, de nombreux ZIPs avec document).
J'ai juste copier passé une partie de mon code.
L'appel à partir d'un bouton dans une liste:
Donc un appel de base à un JS de routine (Vanille règles!).
voici le JS routine:
L'astuce est de ne PAS donner le lien direct du fichier ZIP, mais pour l'envoyer au navigateur. Comme ceci:
De loin la solution la plus simple (au moins dans ubuntu/linux):
Fonctionne comme un charme.