通过 http 在两个 Node.js 服务器之间传输文件

bab*_*dev 5 javascript node.js express multer

我有两个 node.js/express 服务器,它们通过 http 相互通信。服务器A还与浏览器通信并可以处理文件上传请求。当文件上传到服务器 A时,我想将其按原样传输到服务器 B进行进一步处理。最好的方法是什么?最好使用请求承诺模块,这是我用于两个服务器之间通信的模块。

这是我到目前为止得到的,但我无法在服务器之间传输文件,文件已成功上传到服务器 A,并且发送到服务器时没有错误server B,但服务器 B 无法识别该请求文件。我在这里缺少什么?

服务器A路由:

'use strict';

// Routes

 const express = require('express');
 const router = express.Router();
 const multer = require('multer');
 const upload = multer();

 const uploadController = require('./controllers/file/upload');

 router.post('/upload',upload.single('file'),uploadController); 

 module.exports = router;
Run Code Online (Sandbox Code Playgroud)

服务器A uploadController:

'use strict';

const RP = require('request-promise');

module.exports = (req, res) => {

  const body = req.body;

  if(req.file) {

    const file = req.file;

    RP('http://serverB.net/process', { 
      method: 'POST',
      formData: {file_buffer: file.buffer},
      body: body
    })
    .then((response) => {
      return res.status(200).send(response);
    })
    .catch((e) => {
      return res.status(500).send(e.message);
    })
  }
  else {
     return res.status(500).send('unable to upload file');
  }
};
Run Code Online (Sandbox Code Playgroud)

服务器B路由:

'use strict';

// Routes

 const express = require('express');
 const router = express.Router();
 const multer = require('multer');
 const process = multer();

 const processFile = require('./controllers/file/processFile');

 router.post('/process', process.single('file'), processFile); 

 module.exports = router;
Run Code Online (Sandbox Code Playgroud)

服务器B进程文件:

在这里我想处理来自服务器 A 的文件req.file,但是undefined

'use strict';

module.exports = (req, res) => {

  if(req.file) {
  // here i want to do something with the file.
  }

};
Run Code Online (Sandbox Code Playgroud)

zer*_*298 0

您发送文件时使用的编码可能不是multipart/form-data. 尝试在文件发送请求中设置该标头。Expressreq.files只会填充一个multipart/form-data Expressreq.files只会填充一个multipart/form-data 。您已经在使用multer,所以我猜测发送编码不太正确。

RP({
    method: "POST",
    uri: "serverB.net",
    form: {
        file: file.buffer
    },
    headers: {
        "Content-Type": "multipart/form-data"
    }
});
Run Code Online (Sandbox Code Playgroud)