¿Cómo puedo descargar un archivo que está en mi servidor a mi máquina accediendo a una página en un servidor nodeJS?
Estoy usando el ExpressJS y he estado intentando esto:
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();
});
Pero no puedo obtener el nombre del archivo y el tipo de archivo (o extensión). Alguien me puede ayudar con eso?
Respuestas:
Actualizar
Express tiene una ayuda para que esto haga la vida más fácil
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.
También es posible que desee enviar un tipo MIME como este:
Si quieres algo más en profundidad, aquí tienes.
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.
fuente
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
lugar de por.setHeader()
ciertoUtilizar
res.download()
Transfiere el archivo en la ruta como un "archivo adjunto". Por ejemplo:
res.download()
fuente
nodejs proxy file download response
mejores prácticasPara archivos estáticos como archivos PDF, documentos de Word, etc. simplemente use la función estática de Express en su configuración:
Y luego simplemente coloque todos sus archivos dentro de esa carpeta 'pública', por ejemplo:
Y luego un enlace antiguo regular permitirá al usuario descargarlo:
fuente
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... y luego cada solicitud pasa por mEnsureAccess. Por supuesto, eso significa que tendrá que ser capaz de determinar el nivel de acceso de un usuario solo en función de la URL del documento seguro, o lo que sea.En Express 4.x, hay un
attachment()
método paraResponse
:fuente
fuente
Así es como lo hago:
Código:
fuente
window.open("/api/get_audio_file");
, consulte: stackoverflow.com/a/20177012