Vorwort
Beim Herunterladen von Dateien mit HTTP müssen Sie den entsprechenden Antwortheader nur auf dem Server festlegen und Binary zum Senden von Dateidaten verwenden. Der Client (Browser) empfängt Dateidaten basierend auf dem Antwortheader. Lesen Sie in Node.js nach dem Einstellen des Antwortheaders den Dateistrom und übertragen Sie den Stream mit der Methode “.pipe()” in die Response der Antwortobjekte.
1. Datei Download Einführung
HTTP implementiert die Statusinteraktion basierend auf Anforderungsheader und Antwortheader. Nachdem der Client den korrekten Antwortstatus des Servers erhalten hat, analysiert er zunächst den Antwortheader und empfängt und zeigt Daten (Antwortkörper) basierend auf dem Antwortheader an. Für den Datei -Download lautet der Implementierungsprozess wie folgt:
1. Der Client initiiert eine Dateiressourcenanforderung
2. Der Server sucht nach der entsprechenden Datei und legt die Antwortheader wie " Content-Type " und " Content-Disposition " fest, um den Typ "MIME" -Typ und die Dateibeschreibung der Datei darzustellen.
3. Die Client pariert und empfängt Dateidaten basierend auf dem vom Server zurückgegebenen Antwortheader.
Antwortheader, der eingestellt werden muss
Bei der Einrichtung von Datei -Download -Antwort -Headern ist es zusätzlich zu den häufig verwendeten HTTP -Antwort -Headern wichtiger, die folgenden zwei Antwort -Header festzulegen:
Content-Typ: Anwendung/Oktett-StreamContent-Disposition: Anhang; Dateiname = myFileName.ext
In den obigen Einstellungen teilt " Content-Type: application/octet-stream " dem Browser mit, dass es sich um eine binäre Datei handelt, und " Content-Disposition " teilt dem Browser mit, dass dies ein Anhang ist, der heruntergeladen werden muss und dem Browser den Standarddateinamen mitteilt. Wenn der Antwortheader " Content-Disposition " nicht hinzugefügt wird, kann der Browser den Dateiinhalt herunterladen oder anzeigen, und die Verarbeitung verschiedener Browser variiert.
2. Node.js Datei Download Server -Implementierung
Als nächstes implementieren wir einen einfachen Datei -Download -Server basierend auf dem Express -Framework, der hauptsächlich zwei Funktionen enthält: Browsing -Serverdateien und Herunterladen von Dateien .
2.1 Hinzufügen einer Route Hinzufügen
Fügen Sie nach dem Erstellen der Express -Anwendung die folgenden zwei Routen hinzu:
Router.get ('/Dateien', Funktion (req, res, next) {// Serverdatei}); Router.get ('/Datei/: Dateiname', Funktion (req, res, Weiter) {// Datei download});Die beiden oben hinzugefügten Routen werden verwendet, um Serverdateien anzeigen und Datei -Downloads implementieren .
2.2 Serverdateien anzeigen
Um die Anzeige von Serverdateien zu realisieren, müssen Sie das Dateiverzeichnis über das Modul " fs " lesen und Datei-/Verzeichnisprüfungen usw. durchführen. Sie müssen auch das " Pfad " -Modul verwenden, um den Dateipfad zu verarbeiten. Zunächst werden diese beiden Module eingeführt:
const fs = erfordern ('fs'); const path = fordert ('path');Der Implementierungscode zum Anzeigen der Serverdatei lautet wie folgt:
Router.get ('/Dateien', Funktion (req, res, next) {// Serverdatei // Dateiverzeichnis var filepath = path.join (__ Dirname, './'); if (fs.StatSync (path.join (filepath)). Im obigen Code wird nach dem Lesen des Verzeichnisses die Liste der herunterladbaren Dateien über die Ansichtdatei " files.ejs " angezeigt. Der Code ist wie folgt:
<! DocType html> <html> <Head> <title> Download-Dateiauswahl </title> </head> <body> <h1> Wählen Sie die Download-Datei aus: </h1> <%if (Dateien.Länge> 0) {%> <ul> <%Datei.foreach (Funktion (file) {%> <li> <la> <a.href = "/<%". %> </a> </li> <%})%> </ul> <%} else {%> <p> Keine herunterladbaren Dateien ... </p> <%}%> </body> </html>2.3 Datei herunterladen
Beim Herunterladen einer Datei können Sie zuerst die Datei in einen " Buffer " lesen und dann die Dateidaten über die " res.send()” oder " res.end()” -Methoden senden oder die Dateidaten basierend auf dem Stream (" Stream ") senden. Wenn Sie " Stream " zum Implementieren von Datei -Download verwenden, können Sie die Methode " fs.createReadStream()” verwenden, um einen lesbaren Stream zu erstellen, und die Response der Antwortobjekte ist ein beschreibbarer Stream. Auf diese Weise müssen Sie den Dateistrom nur über die Methode ”.pipe()” auf den Response -Antwortstrom übertragen.
Der Datei -Download -Implementierungscode lautet wie folgt:
Router.get ('/Datei/: Dateiname', Funktion (req, res, next) {// Datei download var FileName = req.params.filename; var filepath = path.join (__ DirName, Filename); var stats = fs.statSync (filepath); 'actet-Stream', 'Inhaltsdisposition': 'Anhang;Zusammenfassen
Das obige ist der gesamte Inhalt der Verwendung von node.js, um HTTP -Datei -Downloads zu erreichen. Ich hoffe, es wird für alle hilfreich sein, Node.js.