繁体   English   中英

通过 POST 将文件传递给 NodeJS,然后传递给另一个 API 而不保存在磁盘上

[英]Passing a file via POST to NodeJS and then pass to another API without saving on Disk

我需要在 React UI(使用 axios)中接收来自用户的文件,使用 Express 通过 POST 将该文件发送到 NodeJS 方法,然后,我需要通过 POST 将这个相同的文件直接发送到另一个 API(.NET WebAPI)无需保存在磁盘上。 我试图直接传递数据文件 (req.files.file.data),但 .NET API 无法识别请求中的文件。

是否有可能在“var”中创建一个临时文件并像从磁盘读取文件时那样发送它?

此示例适用于本地文件:

var formData = {
  form: "{ abn: '666666666' }",
  files: JSON.stringify([
    { 
      name: "file1", 
      type: "1", 
      number: "6666" 
    },
    { 
      name: "file2",
      type: "3", 
      number: "3333" 
    },
  ]),
  // Pass multiple values /w an Array
  attachments: [
    fs.createReadStream(__dirname + '/../file1.txt'),
    fs.createReadStream(__dirname + '/../file2.txt')
   ],
};
var reqs = request.post({url:'https://tms-dev-api.micway.com.au/api/company/file', formData: formData, json: true}, function optionalCallback(err, response, body) {
  if (err) {
    return res.send(err);
  }
  return res.send({
    status: response.statusCode,
    body: body
  });
});

我正在创建一个本地文件,然后通过它发送; 但是,我不相信这是最好的方法。 像这样:

router.post('/file', function(req, res) {
  var fstream;
  req.pipe(req.busboy);
  req.busboy.on('file', function (fieldname, file, filename) {
    fstream = fs.createWriteStream(__dirname + '/' + filename);
    file.pipe(fstream);

    var formData = {
    attachments: [
        fs.createReadStream(__dirname + '/' + filename)
      ],
    };
    var reqs = request.post({url:'https://tms-dev-api.micway.com.au/api/company/file', formData: formData, json: true}, function optionalCallback(err, response, body) {
      if (err) {
        return res.send(err);
      }

      console.log({
        status: response.statusCode,
        body: body
      })

      return res.send({
        status: response.statusCode,
        body: body
      });
    });
  });
});

谢谢!

我发现有效的解决方案是在执行期间保存它,读取和操作其他中的数据以将其发送到其他 API,并在收到响应后立即从磁盘中删除它。

创建一个 PassThrough() 流而不是将文件写入磁盘:

const { PassThrough } = require('stream')

...

fstream = new PassThrough()
file.pipe(fstream);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM