node.js - 无法在 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
}
此代码工作正常,因为我能够保存文件。但不幸的是无法检索表单数据中发送的文本值。
解决方案
该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
}
}
}
推荐阅读
- laravel - Why laravel-image-optimizer in Laravel is not working?
- cakephp-2.0 - Cakephp 2 寻找邻居环绕
- watchos - watchOS 5 error adding image to “Graphic complication": the image rep xxx is not aplicable to this complication
- validation - Custom type for jsonschema
- python - Python:访问列表中的多个元素
- php - PHP: the PHP_EOL in .txt file has been mistaken, how can I deal with it?
- php - 从 Magento 1.9 卸载扩展,我无法将产品添加到我的站点
- c# - 带锁的并行方法执行 .NET C#
- excel - VBA 自动筛选条件:如果当前范围/行中的所有单元格为空白,则应用
- pdf - 使用 Filesystemwatcher 通过循环自动打开最新创建的文件