No puedo obtener un cuadro de diálogo de descarga en lugar de descargar directamente un archivo en mi aplicación de nodo.
Mi código problemático se ve así:
app.get(`/search/download`, function(req, res){ var request = require(`request`); request({uri: `http://some.csv.file`, headers: {`content-type`: `text/csv`}} , function(err, response, body) { res.set(`Content-Disposition`, `attachment; filename="search-results.csv"`); res.set(`Content-Type`, `text/csv`); res.send(body); }); }
No importa lo que cambie, tanto Chrome como Safari descargan el archivo inmediatamente en lugar de abrir un cuadro de diálogo de guardado.
Cambie el tipo de contenido de text/csv
a application/octet-stream
.
app.get(`/search/download`, function(req, res){ var request = require(`request`); request({uri: `http://some.csv.file`, headers: {`content-type`: `text/csv`}} , function(err, response, body) { res.set(`Content-Disposition`, `attachment; filename="search-results.csv"`); res.set(`Content-Type`, `application/octet-stream`); res.send(body); }); }
Hay una forma más fácil de hacer lo mismo (si el archivo servido es estático):
app.use(express.static(__dirname + '/some.csv.file', { setHeaders: function(res, path) { res.set('Content-Disposition', 'attachment; filename="search-results.csv"'); res.set('Content-Type', 'application/octet-stream'); } })