Ich bin mir nicht sicher, ob dies mit Standard-Webtechnologien möglich ist.
Ich möchte, dass der Benutzer mehrere Dateien in einer einzigen Aktion herunterladen kann. Das heißt, Sie aktivieren die Kontrollkästchen neben den Dateien und rufen dann alle Dateien ab, die aktiviert wurden.
Ist es möglich - wenn ja, welche Grundstrategie empfehlen Sie? Ich weiß, dass ich mithilfe der Kometentechnologie serverseitige Ereignisse erstellen kann, die eine HttpResponse auslösen, aber ich hoffe, dass es einen einfacheren Weg gibt.
http
web-applications
download
Ankur
quelle
quelle
quelle
link.setAttribute('download', null);
umbenannt alle meine Dateien auf null.link.setAttribute('download',filename)
Innere der Schleife hinzu. Auf diese Weise können Sie die Dateien beliebig benennen. Ich glaube auch, dass es nur der Dateiname sein muss, der die URL nicht enthält. Am Ende habe ich zwei Arrays gesendet: eines mit der vollständigen URL und eines nur mit dem Dateinamen.Minecraft.jar
.Sie können einen temporären Satz versteckter Iframes erstellen, den Download per GET oder POST in diesen initiieren, auf den Start der Downloads warten und Iframes entfernen:
Oder ohne jQuery:
quelle
setTimeout()
?Diese Lösung funktioniert browserübergreifend und löst keine Warnungen aus. Anstatt eine zu erstellen
iframe
, wir hier einen Link für jede Datei. Dadurch wird verhindert, dass Warnmeldungen angezeigt werden.Um den Schleifenteil zu behandeln, verwenden wir
setTimeout
, was notwendig ist, damit er im IE funktioniert.quelle
Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
.Am einfachsten wäre es, mehrere Dateien zu einer ZIP-Datei zusammenzufassen.
Ich nehme an, Sie könnten mehrere Dateidownloads mithilfe einer Reihe von Iframes oder Popups initiieren, aber unter dem Gesichtspunkt der Benutzerfreundlichkeit ist eine ZIP-Datei immer noch besser. Wer möchte durch zehn "Speichern unter" -Dialoge klicken, die der Browser aufruft?
quelle
Ich bin damit einverstanden, dass eine Zip-Datei eine bessere Lösung ist ... Aber wenn Sie mehrere Dateien pushen müssen, ist hier die Lösung, die ich mir ausgedacht habe. Es funktioniert in IE 9 und höher (möglicherweise auch in einer niedrigeren Version - ich habe es nicht getestet), Firefox, Safari und Chrome. Chrome zeigt dem Benutzer eine Nachricht an, um seine Zustimmung zum Herunterladen mehrerer Dateien zu erhalten, wenn Ihre Website diese zum ersten Mal verwendet.
Der einzige Nebeneffekt dieser Technik ist, dass der Benutzer eine Verzögerung zwischen dem Senden und dem angezeigten Download-Dialog sieht. Um diesen Effekt zu minimieren, schlage ich vor, dass Sie die hier beschriebene Technik verwenden und bei dieser Frage feststellen, wann der Browser einen Dateidownload erhält , der darin besteht, ein Cookie mit Ihrer Datei zu setzen, um zu wissen, dass der Download gestartet wurde. Sie müssen auf der Clientseite nach diesem Cookie suchen und es auf der Serverseite senden. Vergessen Sie nicht, den richtigen Pfad für Ihr Cookie festzulegen, da Sie ihn sonst möglicherweise nicht sehen. Sie müssen die Lösung auch für den Download mehrerer Dateien anpassen.
quelle
Eine jQuery-Version des Iframes antwortet:
quelle
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
Dies funktioniert jedoch nicht zum Herunterladen von Bilddateien.Winkellösung:
Arbeitsbeispiel: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
quelle
Um die Antwort von @Dmitry Nogin zu verbessern: Dies hat in meinem Fall funktioniert.
Es wird jedoch nicht getestet, da ich nicht sicher bin, wie der Dateidialog unter verschiedenen Betriebssystem- / Browserkombinationen funktioniert. (Also Community-Wiki.)
quelle
Dies funktioniert in allen Browsern (IE11, Firefox, Edge, Chrome und Chrome Mobile). Meine Dokumente befinden sich in mehreren ausgewählten Elementen. Die Browser scheinen Probleme zu haben, wenn Sie versuchen, es zu schnell zu machen ... Also habe ich eine Zeitüberschreitung verwendet.
Dies ist eine Lösung, die Versprechen verwendet:
quelle
Mit Abstand die einfachste Lösung (zumindest unter Ubuntu / Linux):
Klappt wunderbar.
quelle
Um dies zu lösen, habe ich eine JS-Bibliothek erstellt, um mehrere Dateien direkt in eine Zip-Datei auf der Clientseite zu streamen. Das wichtigste einzigartige Merkmal ist, dass es keine Größenbeschränkungen aus dem Speicher (alles wird gestreamt) oder dem Zip-Format gibt (es verwendet zip64, wenn der Inhalt mehr als 4 GB beträgt).
Da es keine Komprimierung durchführt, ist es auch sehr performant.
Finde es auf npm oder github "downzip" !
quelle
Das folgende Skript hat diesen Job ordnungsgemäß ausgeführt.
quelle
Ich suche nach einer Lösung, um dies zu tun, aber das Entpacken der Dateien in Javascript war nicht so sauber, wie ich wollte. Ich habe beschlossen, die Dateien in eine einzige SVG-Datei zu kapseln.
Wenn Sie die Dateien auf dem Server gespeichert haben (ich nicht), können Sie einfach die href in der SVG einstellen.
In meinem Fall werde ich die Dateien in base64 konvertieren und sie in die SVG einbetten.
Edit: Die SVG hat sehr gut funktioniert. Wenn Sie nur die Dateien herunterladen möchten, ist ZIP möglicherweise besser. Wenn Sie die Dateien anzeigen möchten, scheint SVG überlegen zu sein.
quelle
Bei Verwendung von Ajax-Komponenten können mehrere Downloads gestartet werden. Daher müssen Sie https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow verwenden
Fügen Sie Ihrer Seite eine Instanz von AJAXDownload hinzu oder was auch immer. Erstellen Sie einen AjaxButton und überschreiben Sie onSubmit. Erstellen Sie ein AbstractAjaxTimerBehavior und starten Sie den Download.
Viel Spaß beim Herunterladen!
quelle
Unter Code 100% funktioniert.
Schritt 1 : Fügen Sie den folgenden Code in die Datei index.html ein
Schritt 2 : Fügen Sie den folgenden Code in die Datei index.js ein
HINWEIS : Stellen Sie sicher, dass alle drei Dateien, die heruntergeladen werden sollen, zusammen mit den Dateien angularProject / index.html oder angularProject / index.js in demselben Ordner abgelegt werden.
quelle
Abrufen der URL-Liste mit Ajax-Aufruf und anschließendes Herunterladen mehrerer Dateien mithilfe des JQuery-Plugins .
quelle
So mache ich das. Ich öffne mehrere ZIPs, aber auch andere Arten von Daten (ich exportiere Projet in PDF und gleichzeitig viele ZIPs mit Dokument).
Ich kopiere nur einen Teil meines Codes. Der Anruf von einer Schaltfläche in einer Liste:
Also ein grundlegender Aufruf einer JS-Routine (Vanilla-Regeln!). Hier ist die JS-Routine:
Der Trick besteht darin, den direkten Link der ZIP-Datei NICHT anzugeben, sondern an den Browser zu senden. So was:
quelle
quelle