如何使Azure功能仅针对文件触发,而不针对文件夹?

问题描述 投票:0回答:3

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

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

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

可以指定它仅针对文件而不针对文件夹触发吗?

azure-functions azure-blob-storage azure-blob-trigger
3个回答
1
投票

您遇到的问题是

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

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

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


0
投票

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

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 存储中创建文件夹时至少不会抛出错误。


0
投票

我尝试在 blob 触发器中使用 {fileName}.{fileExtension},并使用可为 null 的字符串作为 fileExtension。

我可以看到该功能仅针对文件触发,而不是具有以下代码的文件夹。

public async Task Run([BlobTrigger("input/{fileName}.{fileExtension}")] BlockBlobClient blobClient, string fileName, string? fileExtension)

就我而言,我必须检查文件扩展名是否为 csv 的 zip。 所以,我就这样做了。

if (fileExtension?.Equals("csv", StringComparison.InvariantCultureIgnoreCase) != false && 
fileExtension?.Equals("zip", StringComparison.InvariantCultureIgnoreCase) != false)
{
   _logger.LogInformation($"Function execution skipped for file '{blobClient.Name}' at {DateTime.UtcNow}. File extension is not supported.");
    return;
}
© www.soinside.com 2019 - 2024. All rights reserved.