如何让 Azure 函数只触发文件,而不触发文件夹?

How to make Azure function trigger only for files, not for folders?

我有一个这样设置的 Azure 函数。

{
  "scriptFile": "identifier.py",
  "bindings": [
    {
      "name": "blob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "customers/{blob}",
      "connection": "DL_GEN2_STORAGE"
    }
  ]
}

我遇到的问题是该函数会触发在 blob 存储中创建的文件夹和文件。

能否指定它只触发文件而不触发文件夹?

您遇到的问题是 {blob} 无法区分文件夹或文件,因为 Azure 存储 Blob 没有目录的概念。这个意义上的目录只是 blob 名称的一部分。

如果在上传时向文件添加了前缀,您可以根据 blob 名称进行过滤,但如果您无法控制它,您的限制就非常有限。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob-trigger?tabs=in-process%2Cextensionv5&pivots=programming-language-python#blob-name-patterns

如果有人感兴趣的话。我遇到的问题是文件夹在触发 Azure 函数时会抛出错误,因为它是该函数的未知数据类型。我目前的解决方案是检查 blob 的大小。

def main(blob: func.InputStream):

    if blob.length is None:
        logging.info("The blob has no data in it.")
        logging.info("The blob is most likely a folder.")
        return

这样至少在 blob 存储中创建文件夹时不会抛出错误。