我已经设置了一个azure函数,该函数是从添加到特定容器的blob触发的。 blob是一个.zip文件,我的目的是使用adm-zip
将blob提取到目录然后读取内容。我对这里的文档很困惑:
https://github.com/Azure/azure-content/blob/master/articles/azure-functions/functions-bindings-storage.md#blob-trigger-supported-types
其中输入参数可以是Object或String。我没有在function.json中看到任何地方来指定我想要输入的内容。
在我的下面的代码中,类型似乎是一个字符串,但由于它没有打印任何东西,我认为它实际上是一个表示文件内容的字节缓冲区。为了使用它,我试图将缓冲区写入本地文件,但它没有成功。它没有抛出错误或打印出saved blob to...
在我的function.json中我有这个:
{
"bindings": [
{
"name": "xmlZipBlob",
"type": "blobTrigger",
"direction": "in",
"path": "balancedataxml",
"connection": "sc2iq_STORAGE"
}
],
"disabled": false
}
然后我将xmlZipBlob
作为我函数的第二个参数:
var fs = require('fs');
module.exports = function (context, xmlZipBlob) {
context.log('Node.js blob trigger function processed blob:', xmlZipBlob);
context.log(`typeof xmlZipBlob:`, typeof xmlZipBlob);
fs.writeFile('xmlZip.zip', xmlZipBlob, (err) => {
if (err) {
throw err;
}
context.log('saved blob to loal file called xmlZip.zip');
context.done();
});
};
1。 blob函数的输入参数的类型是什么?
2。如何控制输入参数是Object还是String?
第3。是否可以使用本机节点fs
模块写入本地文件系统以提取.zip文件?
更新:我认为这是因为尝试使用文件系统而失败,并在此处打开了单独的更独立的问题: Azure Functions: Nodejs, What are restrictions / limitations when using file system?
4。有没有比使用.zip文件更好的选择?
在此问题解决之前,我想我会提出不同的解决方案来处理.zip文件。要么在内存中使用流做一切,要么一起避免使用.zip文件,只需从较小的xml文件中构建更大的xml文件。无论哪种方式,似乎应该有一些文档或警告,将依赖于文件系统的节点函数移植到azure函数所需的内容。
答案 0 :(得分:8)
在Node函数中(与在函数定义中声明参数类型的C#相反),输入类型默认为string。如果您尝试绑定到二进制数据,可以通过 dataType 属性在function.json绑定中指明,例如:
{
"bindings": [
{
"name": "xmlZipBlob",
"type": "blobTrigger",
"dataType": "binary",
"direction": "in",
"path": "balancedataxml",
"connection": "sc2iq_STORAGE"
}
]
}
这会将blob输入作为节点缓冲区传递给您的函数。请注意,这不是流式传输 - 缓冲区完全读入内存。
关于你关于文件系统访问的问题,我在你的另一篇SO帖子上回答了这个问题:)