Aktualisieren
Express hat einen Helfer , der das Leben leichter macht.
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});
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.
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
Möglicherweise möchten Sie auch einen MIME-Typ wie diesen senden:
res.setHeader('Content-type', 'video/quicktime');
Wenn Sie etwas ausführlicheres wollen, dann sind Sie hier.
var path = require('path');
var mime = require('mime');
var fs = require('fs');
app.get('/download', function(req, res){
var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});
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.