Actualizar
Express tiene una ayuda para que esto haga la vida más fácil
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});
Vieja respuesta
En lo que respecta a su navegador, el nombre del archivo es solo 'descargar', por lo que debe proporcionarle más información utilizando otro encabezado HTTP.
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
También es posible que desee enviar un tipo MIME como este:
res.setHeader('Content-type', 'video/quicktime');
Si quieres algo más en profundidad, aquí tienes.
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);
});
Puede establecer el valor del encabezado a lo que quiera. En este caso, estoy usando una biblioteca de tipo mime - node-mime , para verificar cuál es el tipo mime del archivo.
Otra cosa importante a tener en cuenta aquí es que he cambiado su código para usar un readStream. Esta es una manera mucho mejor de hacer las cosas porque usar cualquier método con 'Sincronizar' en el nombre está mal visto porque el nodo está destinado a ser asíncrono.