我已经设置了一个Azure函数,它会在特定容器中添加blob时触发。该blob是一个.zip文件,我的意图是使用
在我的下面的代码中,类型似乎是一个字符串,但由于它没有打印出任何东西,我假设它实际上是表示文件内容的字节缓冲区。为了处理这个问题,我尝试将缓冲区写入本地文件,但没有成功。它没有抛出错误或打印出“saved blob to…”。 在我的function.json中,我有这个:
adm-zip
将blob解压到一个目录中,然后读取其内容。但是,我对此处的文档感到困惑:
https://github.com/Azure/azure-content/blob/master/articles/azure-functions/functions-bindings-storage.md#blob-trigger-supported-types
其中说输入参数可以是对象或字符串。我没有在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.函数blobs的输入参数类型是什么?
2.如何控制输入参数是对象还是字符串?
3.是否可以使用本地文件系统来提取.zip文件的原生节点fs
模块?
更新:我认为这个问题失败是因为尝试使用文件系统并已经在这里打开了一个更加隔离的问题: Azure Functions: Nodejs, What are restrictions / limitations when using file system?
4.有没有比使用.zip文件更好的替代方案?
在解决这个问题之前,我认为我将需要想出不同的解决方案来处理.zip文件。 可以使用流在内存中完成所有操作,或者完全避免使用.zip文件,而只需将较小的xml文件组合成较大的xml文件。 无论哪种方式,似乎都应该有一些文档或警告,以便将依赖于文件系统的节点函数移植到Azure函数。