首页 > 解决方案 > 无法在 Azure Function 上的 Node JS 中接收和解析 Multipart 以及 Text 数据

问题描述

我正在 Node JS 中创建一个 Azure 函数。我需要发送多部分数据(图像或文件)以及文本数据(其他信息,如保存文件的位置等)。

从 UI 我将数据(文件和文本)作为表单数据(新 FormData())发送

在 Azure Function 上,我使用parse-multipart来读取 Multipart 数据。

我的 Azure 函数看起来像这样。

var stream = require('stream');
var multipart = require("parse-multipart");
module.exports = async function (context, req) {

  var bodyBuffer = Buffer.from(req.body);
  // get boundary for multipart data e.g. ------WebKitFormBoundaryDtbT5UpPj83kllfw
  var boundary = multipart.getBoundary(req.headers['content-type']);
  // parse the body
  var parts = multipart.Parse(bodyBuffer, boundary);
    var fileStream0 = new stream.Readable();
    fileStream0.push(parts[0].data);
    fileStream0.push(null);
    // Further Uses this Stream to save files to Azure Storage
}

此代码工作正常,因为我能够保存文件。但不幸的是无法检索表单数据中发送的文本值。

标签: node.jsazureazure-functionsmultipartform-data

解决方案


parts变量是任何数组,每个项目都是提交表单的一个字段。因此,您必须遍历该数组以获取所有发送的字段。

我相信您必须将代码更改为这样的

var stream = require('stream');
var multipart = require("parse-multipart");

module.exports = async function (context, req) {

  var bodyBuffer = Buffer.from(req.body);
  // get boundary for multipart data e.g. ------WebKitFormBoundaryDtbT5UpPj83kllfw
  var boundary = multipart.getBoundary(req.headers['content-type']);
  // parse the body
  var parts = multipart.Parse(bodyBuffer, boundary);
  for (var part of parts) {
    if(part.filename) {
      // handle file
    } else {
      // handle other form field
    }
  }
}

推荐阅读