Node.js读取multipart / form-data POST

时间:2019-05-23 01:43:51

标签: javascript node.js ajax post

我使用AJAX将文件传递给node.js。该文件作为Base64字符串传递,我使用multipart / form-data传递。 AJAX部分可以正常工作,但是我需要将字符串存储在服务器端的变量中,即Node.js中。现在,在PHP上这将非常简单:

$someVar = $_POST["myBase64EncodedFile"];

除了Node.js之外,我该如何实现呢?我必须使用Node.js,并且我不希望将文件保存在某些临时文件夹中,我只需要在可变参数上使用字符串即可。有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

只需使用Request.body对象:

let someVar = req.body["myBase64EncodedFile"];

答案 1 :(得分:0)

使用formidable模块。

在express中,您可以这样操作:

var formidable = require('formidable');
const form = new formidable.IncomingForm();
function handlerFormByEvent(req, res, next) {
  form
    .parse(req)
    .on('fileBegin', (name, file) => {
      console.time('start');
      console.log('name', name);
      file.path = `uploads/${file.name}`;
    })
    .on('progress', (accepted, total) => {
      console.log(`accept:%d,total:%d`, accepted, total);
    })
    .on('field', (name, field) => {
      console.log('field', name, field);
    })
    .on('file', (name, file) => {
      // handle file
      console.log('name', name);
      console.log(file.toJSON());
    })
    .on('aborted', error => {
      let message = error.message;
      res.render('error', { message, error });
    })
    .on('error', err => {
      console.error('Error', err);
      let message = err.message;
      res.status(err.status || 500);
      res.render('error', { message, error: err });
    })
    .on('end', () => {
      res.end('ok');
    });
}