Cómo descargar un archivo con Node.js desde google drive api
No necesito nada especial. Solo quiero descargar un archivo de GoogleDrive y luego guardarlo en un directorio determinado del cliente.
app.get("/download",function(req,res){ const p38290token = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI); p38290token.setCredentials({ refresh_token: token.acc }); const p38290Id = google.drive({ version: "v3", auth: p38290token, }); var dest = fs.createWriteStream("./test.png"); try { p38290Id.files.get({ fileId: "1daaxy0ymKbMro-e-JnexmGvM4WzW-3Hn", alt: "media" }, { responseType: "stream" }, (err, res) => { res.data .on("end", () => { console.log("Done"); }) .on("error", err => { console.log("Error", err); }) .pipe(dest); // i want to sent this file to client who request to "/download" } ) } catch (error) { } })Quiero hacer que alguien venga a www.xyz.com/download y el archivo se descargará automáticamente
El problema parece ser con esta línea:
var dest = fs.createWriteStream("./test.png"); Está utilizando un comando del sistema de archivos que está destinado a interactuar con archivos en el servidor. Su pregunta deja en claro que desea que express entregue el contenido del archivo al cliente que realiza la solicitud HTTP.
Para eso, solo puede usar el parámetro res de la función de devolución de llamada de ruta. Lo declaras en esta línea:
app.get("/download",function(req,res){ En su caso, eliminaría la variable dest por completo y simplemente pipe el archivo a res así:
.pipe(dest);Echa un vistazo a esta respuesta también.