Wie kann ich eine Datei auf meinem Server auf meinen Computer herunterladen, um auf eine Seite auf einem NodeJS-Server zuzugreifen?
Ich benutze das ExpressJS und habe Folgendes versucht:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Aber ich kann den Dateinamen und den Dateityp (oder die Erweiterung) nicht erhalten. Kann mir jemand dabei helfen?
Antworten:
Aktualisieren
Express hat einen Helfer , der das Leben leichter macht.
Alte Antwort
Für Ihren Browser lautet der Dateiname nur "Download". Sie müssen ihm also weitere Informationen geben, indem Sie einen anderen HTTP-Header verwenden.
Möglicherweise möchten Sie auch einen MIME-Typ wie diesen senden:
Wenn Sie etwas ausführlicheres wollen, dann sind Sie hier.
Sie können den Header-Wert beliebig einstellen. In diesem Fall verwende ich eine MIME-Bibliothek - Node-MIME -, um den MIME-Typ der Datei zu überprüfen.
Ein weiterer wichtiger Punkt ist, dass ich Ihren Code geändert habe, um einen readStream zu verwenden. Dies ist eine viel bessere Möglichkeit, Dinge zu tun, da die Verwendung einer Methode mit 'Sync' im Namen verpönt ist, da der Knoten asynchron sein soll.
quelle
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
anstelle von.setHeader()
übrigensVerwenden
res.download()
Es überträgt die Datei im Pfad als "Anhang". Zum Beispiel:
res.download()
quelle
nodejs proxy file download response
Best PracticeVerwenden Sie für statische Dateien wie PDFs, Word-Dokumente usw. einfach die statische Funktion von Express in Ihrer Konfiguration:
Und dann legen Sie einfach alle Ihre Dateien in diesem 'öffentlichen' Ordner ab, zum Beispiel:
Und dann ermöglicht ein normaler alter Link dem Benutzer, ihn herunterzuladen:
quelle
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... und dann geht jede Anfrage durch mEnsureAccess. Das bedeutet natürlich, dass Sie in der Lage sein müssen, die Zugriffsebene eines Benutzers nur anhand der URL des sicheren Dokuments oder was auch immer zu ermitteln.In Express 4.x gibt es eine
attachment()
Methode, umResponse
:quelle
quelle
So mache ich das:
Code:
quelle
window.open("/api/get_audio_file");
, siehe: stackoverflow.com/a/20177012