Azure 逻辑应用程序可从 Azure blob 容器动态获取 Blob 内容,而无需将文件名保存在路径中
Azure Logic App to dynamically get Blob contents from Azure blob container without having to save the name of the file in path
我正在使用 Azure 逻辑应用从我的 Azure 容器中获取 Blob 内容。 Blob 每月以以下格式存储在我的容器中:-
例如。 mycontainer/invoice/20200101/invoice1.csv、mycontainer/invoice/20200201/invoice2.csv 等等。
换句话说,每个月的发票都动态地存储在我的容器中,并带有一个表示月份和日期的文件夹,如示例中所示。 (2020-01-01, yyyyMMdd 格式)
到目前为止,我能够获取在我的容器中创建的最新文件夹。在这种情况下是 10 月,因为我们是 10 月。但我希望获取该文件夹中的最新文件。
我目前的工作流程如下:-
对此有什么建议吗?
谢谢!
您可以 运行 从 BLOB 到逻辑应用程序的事件网格触发器。一旦新文件保存在 BLOB 中,它就可以将事件发布到事件网格,您的逻辑应用程序可以在事件网格中订阅该事件,然后您可以 运行 您的工作流。您可以在每次保存文件时触发逻辑应用程序工作流,而不是以这种方式进行循环。
从 here 中了解有关事件网格的更多信息。
我提供了整个逻辑应用程序供您参考,大部分操作与您的相同:
1.逻辑应用概述
2.前三个动作
3.第四、第五动作
4.“For each”循环的详细信息
“设置变量”中的表达式为int(substring(items('For_each')?['Name'], 0, 8))
,“设置变量3”中的表达式为replace(items('For_each')?['Name'], '/', '')
5. 最后两个动作
“获取 blob 内容”操作中的最后一个表达式是 body('List_blobs_2')?['value'][0]?['Name']
====================================更新=================================
1. 删除逻辑应用的最后一个操作“获取 blob 内容”。
2. 然后我们在操作“List blobs 2”之后开始。添加两个“初始化变量”。
3. 添加另一个“For each”循环。 请注意:从“List blobs 2”中选择value
到“For each 2” " 但不要从“List blobs”中选择 value
到“For each 2”。
4.“For each 2”循环中的详细信息。
两个fx ticks(...)
的表达式都是ticks(items('For_each_2')?['LastModified'])
并且在“设置变量 5”中,还从“List blobs 2”中选择 Name
,但不是从“列出 blob”。
5. 然后添加“获取 blob 内容”操作,如下图所示。
6. 顺便说一句:请在您的逻辑应用程序之前对所有“For each”循环操作进行此设置你 运行 逻辑应用程序。否则,结果可能不正确。
单击“For each”操作的...
按钮并单击“设置”,启用Concurrency Control
并将Degree of Parallelism
设置为1
。
我正在使用 Azure 逻辑应用从我的 Azure 容器中获取 Blob 内容。 Blob 每月以以下格式存储在我的容器中:- 例如。 mycontainer/invoice/20200101/invoice1.csv、mycontainer/invoice/20200201/invoice2.csv 等等。 换句话说,每个月的发票都动态地存储在我的容器中,并带有一个表示月份和日期的文件夹,如示例中所示。 (2020-01-01, yyyyMMdd 格式)
到目前为止,我能够获取在我的容器中创建的最新文件夹。在这种情况下是 10 月,因为我们是 10 月。但我希望获取该文件夹中的最新文件。
我目前的工作流程如下:-
对此有什么建议吗? 谢谢!
您可以 运行 从 BLOB 到逻辑应用程序的事件网格触发器。一旦新文件保存在 BLOB 中,它就可以将事件发布到事件网格,您的逻辑应用程序可以在事件网格中订阅该事件,然后您可以 运行 您的工作流。您可以在每次保存文件时触发逻辑应用程序工作流,而不是以这种方式进行循环。
从 here 中了解有关事件网格的更多信息。
我提供了整个逻辑应用程序供您参考,大部分操作与您的相同:
1.逻辑应用概述
2.前三个动作
3.第四、第五动作
4.“For each”循环的详细信息
“设置变量”中的表达式为int(substring(items('For_each')?['Name'], 0, 8))
,“设置变量3”中的表达式为replace(items('For_each')?['Name'], '/', '')
5. 最后两个动作
“获取 blob 内容”操作中的最后一个表达式是 body('List_blobs_2')?['value'][0]?['Name']
====================================更新=================================
1. 删除逻辑应用的最后一个操作“获取 blob 内容”。
2. 然后我们在操作“List blobs 2”之后开始。添加两个“初始化变量”。
3. 添加另一个“For each”循环。 请注意:从“List blobs 2”中选择value
到“For each 2” " 但不要从“List blobs”中选择 value
到“For each 2”。
4.“For each 2”循环中的详细信息。
两个fx ticks(...)
的表达式都是ticks(items('For_each_2')?['LastModified'])
并且在“设置变量 5”中,还从“List blobs 2”中选择 Name
,但不是从“列出 blob”。
5. 然后添加“获取 blob 内容”操作,如下图所示。
6. 顺便说一句:请在您的逻辑应用程序之前对所有“For each”循环操作进行此设置你 运行 逻辑应用程序。否则,结果可能不正确。
单击“For each”操作的...
按钮并单击“设置”,启用Concurrency Control
并将Degree of Parallelism
设置为1
。