我有一个像这样设置的 Azure 函数。
{
"scriptFile": "identifier.py",
"bindings": [
{
"name": "blob",
"type": "blobTrigger",
"direction": "in",
"path": "customers/{blob}",
"connection": "DL_GEN2_STORAGE"
}
]
}
我遇到的问题是该函数会触发在 blob 存储中创建的文件夹和文件。
可以指定它仅针对文件而不针对文件夹触发吗?
您遇到的问题是
{blob}
无法区分文件夹或文件,因为Azure存储Blob没有目录的概念。从这个意义上说,目录只是 blob 名称的一部分。
如果在上传的文件中添加了前缀,您可以对 blob 名称进行过滤,但如果您无法控制它,那么您的限制就非常有限。
如果有人有兴趣的话。我遇到的问题是,文件夹在触发 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 存储中创建文件夹时至少不会抛出错误。
我尝试在 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;
}