如何使用请求模块下载,然后上传没有中间文件的文件

时间:2015-12-07 10:59:31

标签: node.js express npm

我想首先将图像文件下载到服务器,然后将此文件上传到其他服务器。

如果没有download file step,那将非常简单

 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");
 });

但是,对于download image file;

的情况

我不想先通过request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))这样的格式保存文件。然后重复fs.createReadStream

有什么方法可以获取文件流,所以我可以直接使用文件流构成formData;

2 个答案:

答案 0 :(得分:1)

这对我有用:

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");
});

答案 1 :(得分:1)

request文档之后,您可以使用

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

在此方案中,数据将从sourceUrl流向targetUrl,但不需要保存在服务器上的临时文件中。

参见https://github.com/request/request#streaming了解详情。