【问题标题】:Azure Functions: How to read blob input for nodejs?Azure Functions:如何读取 nodejs 的 blob 输入?
【发布时间】:2016-08-24 04:58:34
【问题描述】:

我已经设置了一个 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 文件?

更新:我认为这是由于尝试使用文件系统而失败并在此处打开了单独的更孤立的问题: Azure Functions: Nodejs, What are restrictions / limitations when using file system?

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

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

【问题讨论】:

    标签: node.js azure-functions


    【解决方案1】:

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

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

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

    关于您关于文件系统访问的问题,我在您的其他 SO 帖子中回答了该问题 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2018-05-17
      • 2019-02-02
      • 2017-04-06
      • 2023-03-31
      • 2021-08-26
      • 2021-11-02
      相关资源
      最近更新 更多