在 Python 中使用 Azure 函数绑定 Blob 输入不起作用(inputblob.name 为 None”)。如何进行故障排除?

Cha*_*own 1 python azure azure-storage-blobs azure-functions

我有以下用 Python 编写的简单 Azure 函数。它是一个 HTTP 触发器,它应该简单地返回来自 Azure 存储帐户的 blob 输入绑定的名称和 URI(此处为 Microsoft 的参考文档)。

import logging
import azure.functions as func
import azure.storage.blob
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

def main(req: func.HttpRequest, inputblob: func.InputStream) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    return func.HttpResponse(f"Blob name: {inputblob.name}. Blob URI: {inputblob.uri}")
Run Code Online (Sandbox Code Playgroud)

我的 function.json 文件看起来像这样。我已经验证 local.settings.json 中的连接字符串是正确的,并且 blob 路径也是正确的。

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "containername/testblobname.json",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在,此函数返回“JSON 名称:无。JSON URI:无”。显然,blob 输入绑定不起作用。我该如何解决这个问题,或者我错过了什么?

Jim*_* Xu 6

根据我的研究,目前,blob 输入绑定的元数据(例如名称、长度)不是由函数宿主提供的,但您仍然可以通过blob.read(). 更多详情请参考https://github.com/Azure/azure-functions-python-worker/issues/576

我的 function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "input/keyCredentials.txt",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的 code

import logging

import azure.functions as func


def main(req: func.HttpRequest, inputblob: func.InputStream) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    return func.HttpResponse(f"Blob conetnt: {inputblob.read()}.")
Run Code Online (Sandbox Code Playgroud)