Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用HTTP触发器解析Azure函数应用程序中的多部分表单数据?(NodeJS)_Node.js_Http_Azure_Multipartform Data_Azure Functions - Fatal编程技术网

Node.js 如何使用HTTP触发器解析Azure函数应用程序中的多部分表单数据?(NodeJS)

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函数编写一个NodeJS HTTP端点

此端点将是一个POST端点,它接收文件并将这些文件上载到blob存储

然而,NodeJS的多部分表单数据解析器都采用httpserver或expressJS中间件的形式

在从函数应用程序的包装器接收到多部分表单数据之后,是否有任何可用的工具可以解析这些数据


谢谢

由于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存储。