node.js - 如何将 Node 中的 multipart/form-data POST 请求转发到另一个服务

标签 node.js post form-data

我需要从客户端发送 multipart/form-data POST(xliff 文件)到 Node.js 服务器,然后捕获 Node.js 中的数据并将该 POST 转发到另一个 Java 服务。

我都用过multerexpress-fileupload解析表单数据流并捕获 Node.js 中 xliff 的缓冲区,两者都为我提供了文件及其内容作为缓冲区就好了。

但是,我似乎无法在 Node 层重新创建 FormData 对象以将 POST 转发到 Java 服务。

我继续收到错误消息“连接已终止解析多部分数据”,或者 Java 服务根本没有响应。

我还尝试使用 tmp库在本地创建一个临时文件来写入缓冲区,然后尝试 FormData('file', fs.createReadStream(<path>)) ,但这似乎对我也不起作用......尽管我不确定我做得是否正确。

使用完全相同的doPOST直接从浏览器发出请求工作正常,但是一旦我 try catch Node 层中的调用,然后将 POST 转发到 Java 服务,它就不再适合我了。

.

const multer = require('multer');
const upload = multer();

router.post('/', upload.any(), (req, res) => {
  const { headers, files } = req;

  console.log('--------------- files:', files[0]); // object with buffer, etc.

  const XMLString = files[0].buffer.toString('utf8'); // xml string of the xliff

  const formFile = new FormData();
  formFile.append('file', XMLString);

  console.log('--------------- formFile:', formFile); // FormData object with a key of _streams: [<xml string with boundaries>, [Function: bound ]]

  headers['Content-Type'] = 'multipart/form-data';
  const url = 'some/url/to/Java/service'

  doPOST(url, formFile, {}, headers)
    .catch((error) => {
      const { status, data } = error.response;
      res.status(status).send(data);
    })
    .then(({ data }) => {
      res.send(data);
    });
});

最佳答案

您可以直接将buffer传递给表单数据,但随后您还需要指定filename参数。

const multer = require('multer');
const upload = multer();

router.post('/', upload.any(), (req, res) => {
  const { headers, files } = req;
  const { buffer, originalname: filename } = files[0];

  const formFile = new FormData();
  formFile.append('file', buffer, { filename });

  headers['Content-Type'] = 'multipart/form-data';
  const url = 'some/url/to/Java/service'

  doPOST(url, formFile, {}, headers)
    .catch((error) => {
      const { status, data } = error.response;
      res.status(status).send(data);
    })
    .then(({ data }) => {
      res.send(data);
    });
});

关于node.js - 如何将 Node 中的 multipart/form-data POST 请求转发到另一个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220350/

相关文章:

http - 如何在asp classic中获取作为正文发布的值的内容?

php - 将数据从 jQuery 传递到 PHP 以获取 ajax 帖子

jquery - 如何在jquery中将数据serialize()和新的formData结合起来

angular - 发布到 Angular 4/5 页面

javascript - 共享http库

javascript - 自动获取所有 Node xml

node.js - 错误 : sorry, 已经有太多客户端

javascript - Node Js findByIdAndUpdate 函数未在数据库中更新

Java - 在 Web 浏览器中显示 HttpResponse 的内容

asp.net-mvc - 如何将其他表单数据与 MVC 文件上传一起传递?