Azure Functions:如何读取 nodejs 的 blob 输入?

Azure Functions: How to read blob input for nodejs?

我设置了一个 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 其中表示输入参数可以是对象或字符串。我没有在 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 文件?

更新:我认为这是由于尝试使用文件系统而失败,并在此处打开了单独的更孤立的问题:

4.有没有比使用 .zip 文件更好的选择?

在解决这个问题之前,我想我会想出不同的解决方案来处理 .zip 文件。要么用流在内存中做所有事情,要么避免一起使用 .zip 文件,只是从较小的 xml 文件构建一个更大的 xml 文件。无论哪种方式,似乎应该有一些文档或警告,说明将依赖于文件系统的节点函数移植到 azure 函数需要什么。

在 Node 函数中(与在函数定义中声明参数类型的 C# 不同)输入类型默认为字符串。如果您尝试绑定到二进制数据,您可以通过 dataType 属性 在 function.json 绑定中指明,例如:

{
  "bindings": [
    {
      "name": "xmlZipBlob",
      "type": "blobTrigger",
      "dataType": "binary",
      "direction": "in",
      "path": "balancedataxml",
      "connection": "sc2iq_STORAGE"
    }
  ]
}

这会将 blob 输入作为节点缓冲区传递给您的函数。请注意,这不是流式传输 - 缓冲区被完全读入内存。

关于你关于文件系统访问的问题,我在你的另一个 SO post :)

上回答了这个问题