cómo usar el módulo de solicitud para descargar, y luego cargar el archivo sin un archivo intermedio

Quiero descargar primero un archivo de imagen al servidor, luego subirlo a otro servidor.

Si no hay download file step , será muy sencillo.

  var fs = require('fs'); var path = '/tmp/test.png'; var formData = { method: POST, url: 'http://127.0.0.1:3000', json: true, formData :{file: fs.createReadStream(path)} }; request(formData, function(err, res, body){ console.log("successful"); }); 

Sin embargo, para la situación con el download image file ;

No quiero guardar el archivo primero, a través del formato como request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) . y luego repita fs.createReadStream .

¿Hay algún método para obtener el flujo de archivos, por lo que puedo usar el flujo de archivos directamente para constituir formData ?

Siguiendo la documentación de la request , puede utilizar

 request.get(sourceUrl).pipe(request.post(targetUrl)) 

en este esquema, los datos fluirán desde sourceUrl hasta targetUrl, pero no será necesario guardarlos en un archivo temporal en el servidor.

Consulte https://github.com/request/request#streaming para obtener más detalles.

Esto funciona para mí:

 var fs = require('fs'); var request = require('request'); var formData = { method : 'POST', url : 'http://127.0.0.1:3000', json : true, formData : { file : request(downloadUrl) } }; request(formData, function(err, res, body){ if (err) throw err; console.log("successful"); });