Node.js 如何使用HTTP触发器解析Azure函数应用程序中的多部分表单数据?(NodeJS)
我想使用Azure函数编写一个NodeJS HTTP端点 此端点将是一个POST端点,它接收文件并将这些文件上载到blob存储 然而,NodeJS的多部分表单数据解析器都采用httpserver或expressJS中间件的形式 在从函数应用程序的包装器接收到多部分表单数据之后,是否有任何可用的工具可以解析这些数据Node.js 如何使用HTTP触发器解析Azure函数应用程序中的多部分表单数据?(NodeJS),node.js,http,azure,multipartform-data,azure-functions,Node.js,Http,Azure,Multipartform Data,Azure Functions,我想使用Azure函数编写一个NodeJS HTTP端点 此端点将是一个POST端点,它接收文件并将这些文件上载到blob存储 然而,NodeJS的多部分表单数据解析器都采用httpserver或expressJS中间件的形式 在从函数应用程序的包装器接收到多部分表单数据之后,是否有任何可用的工具可以解析这些数据 谢谢 由于Azure函数在Node.js中包装了http服务器对象,并公开了一个简单的req和context,其中包含多个功能,有关详细信息,请参阅 大多数情况下,Azure函数是为触
谢谢 由于Azure函数在Node.js中包装了http服务器对象,并公开了一个简单的
req
和context
,其中包含多个功能,有关详细信息,请参阅
大多数情况下,Azure函数是为触发器和webhooks请求而设计的,详细比较请参考
同时,您可以尝试回答将请求正文内容解析为文件内容,并利用Azure Storage SDK for node.js上传到Azure Storage,您可以通过KUDU控制台安装自定义节点模块。有关更多信息,请参阅
我建议您可以尝试利用node.js来接近您的requiremnet。由于它是一个基于expressjs的项目,因此更容易处理上传文件
如有任何进一步的问题,请随时通知我 您可以尝试将此适配器用于函数和express,它可能允许您成功使用所需的多部件中间件: 作为一个不太理想的选项,您可以自己解析主体,所有多部分数据都将在req.body中可用,并且看起来像这样:
------WebKitFormBoundarymQMaH4AksAbC8HRW
Content-Disposition: form-data; name="key"
value
------WebKitFormBoundarymQMaH4AksAbC8HRW
Content-Disposition: form-data; name=""
------WebKitFormBoundarymQMaH4AksAbC8HRW--
我确实认为更好地支持httpserver/express是一个好主意,以实现这种扩展性。回答最初的问题: 然而,NodeJS的多部分表单数据解析器都采用 httpserver或expressJS中间件 是否有任何可用的工具可以解析多部分表单数据 从函数应用程序的 包装纸 即使在您提出这个问题2年后,多部分表单数据解析器的状态也不是很好,正如您所注意到的,大多数解析器都假设
req
对象是一个流,教程/演示展示了如何使用express或httpServer解析多部分/表单数据
但是,有一个parse multipart
npm包,它可以处理azure函数中的req.body
,并使用类似于以下代码返回对象数组:
var multipart = require("parse-multipart");
module.exports = function (context, request) {
context.log('JavaScript HTTP trigger function processed a request.');
// encode body to base64 string
var bodyBuffer = Buffer.from(request.body);
var boundary = multipart.getBoundary(request.headers['content-type']);
// parse the body
var parts = multipart.Parse(bodyBuffer, boundary);
context.res = { body : { name : parts[0].filename, type: parts[0].type, data: parts[0].data.length}};
context.done();
};
(原始来源:)
我注意到,parse multipart
可能遇到的一个困难是使用文本字段解析表单。一个稍有改进的版本称为multipartformdata
:
require('multipart-formdata')。解析(req.body,boundary)
//返回[{field,name,data,filename,type},…],其中数据是可用于保存文件的缓冲区
目前看来,手动解析是唯一的解决方案,尽管对于大型文件集,这可能会失败。我知道API应用程序解决方案,但很高兴得到确认,多部分解析不是Azure函数预期用例的一部分(目前),谢谢!似乎大多数基于节点的多部分解决方案(总线男孩、多路复用器(基于总线男孩)、多方等)都希望req
是一个流(例如req.pipe(总线男孩)
)。azure函数提供的req
或者使用azure函数express对其进行包装都不支持这一点,尽管我可能忽略了一些东西。我希望能够使用multer中间件,并让它将文件直接上传到azure blob存储。