Node.js&;请求模块:从可读流开始上载

Node.js&;请求模块:从可读流开始上载,node.js,file-upload,request,Node.js,File Upload,Request,当用户在我的node.js服务器上上载文件时,我需要将同一文件上载到另一台服务器 我想知道是否可以开始将上传的部分发送到第二台服务器,而不必等待文件已完全上传到node.js服务器上 我正在使用请求模块上传到第二台服务器 下面的代码等待用户完成上传后再开始第二次上传(尽管我不是100%确定): 以下是您可以使用的方法(注意:这要求您当前的主体解析中间件不针对此特定路由运行,否则请求数据将已被消耗): 谢谢你的回答。由于我对node.js和express安装相对较新,您能解释一下如何绕过expre

当用户在我的node.js服务器上上载文件时,我需要将同一文件上载到另一台服务器

我想知道是否可以开始将上传的部分发送到第二台服务器,而不必等待文件已完全上传到node.js服务器上

我正在使用请求模块上传到第二台服务器

下面的代码等待用户完成上传后再开始第二次上传(尽管我不是100%确定):


以下是您可以使用的方法(注意:这要求您当前的主体解析中间件不针对此特定路由运行,否则请求数据将已被消耗):


谢谢你的回答。由于我对node.js和express安装相对较新,您能解释一下如何绕过express body解析器来完成这条路线吗?或者有没有办法用我当前的代码实现这一点(我看到请求模块有一些管道功能,
req.files.file.path
是一个可读的流。而且您的代码似乎没有将文件保存在主服务器上?
app.post('/upload', function(req, res, next){
    fs.readFile(req.files.file.path, function (err, data) {
        var newName = moment().format('YYYYMMDDHHmmss') + "_" + (Math.floor(Math.random() * (10000 - 0) + 0));
        var name = newName + "." + req.files.file.extension;
        var newPath = "public/uploads/"+name;
        fs.writeFile(newPath, data, function (err) {
            if (err) {
                throw err;
                res.send("error");
            }
            fs.unlink(req.files.file.path, function (err) {
                if (err) response.errors.push("Erorr : " + err);
                console.log('successfully deleted temp file : '+ req.files.file.path );
            });
            var uploadurl = "http://second.server.com/upload;
            var r = request.post(uploadurl, function optionalCallback (err, httpResponse, body) {
                if (err) {
                    return console.error('upload failed:', err);
                }
                console.log('Upload successful!  Server responded with:', body);
            });
            var form = r.form();
            form.append('file', fs.createReadStream(newPath));           
            res.send(newPath);
        });
    });
});
var Busboy = require('busboy');

// ...

app.post('/upload', function(req, res, next) {
  var busboy = new Busboy({ headers: req.headers }),
      foundFile = false,
      uploadurl = 'http://second.server.com/upload',
      form,
      r;

  busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
    if (foundFile || fieldname !== 'file')
      return file.resume(); // skip files we're not working with

    foundFile = true;

    r = request.post(uploadurl, function(err, httpResponse, body) {
      if (err)
        return console.error('upload failed:', err);
      console.log('Upload successful!  Server responded with:', body);
    });

    form = r.form();
    form.append('file', file);
  }).on('finish', function() {
    res.send('File ' + (foundFile ? '' : 'not ') + 'transferred');
  });

  req.pipe(busboy);
});