使用数据工厂将 Sharepoint 文件夹的内容复制到 Blob 容器

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

要求是将 PDF 文件从这些文件夹和子文件夹复制到 Blob 容器。文件应该放置在 blob 容器中,而不保留文件夹结构,只保留文件本身......我有以下管道,如下所示:

此管道仅成功提取 SharePoint 文件夹位置中的一个文件。 “获取元数据”活动的 URL 如下所示:

https://cactuscompany.sharepoint.com/sites/cactuscompany/_api/web/GetFolderByServerRelativeUrl('/sites/mydatateam/Shared 文档/常规/全局/the_data_I_need/')/文件

数据集如下所示:

这也是我复制活动中数据集属性的一部分:

@concat(replace(activity('get metadata').output.value[0]['odata.id'],'https://cactuscompany.sharepoint.com/',''),'/$value')

我错过了什么?我该怎么做才能让我的管道获取此 SharePoint 位置中的其余文件,并获取子文件夹中的这些文件?

azure azure-active-directory azure-data-factory
1个回答
0
投票

要从子文件夹复制文件,请结合使用逻辑应用和 ADF 管道。

使用逻辑应用中的 Sharepoint 连接器 - 获取项目 操作来获取子文件夹中的所有文件路径列表。在其中添加参数包括嵌套项目

这将给出所有文件列表,但它也包括文件夹的元数据属性。要过滤掉这些内容,请在逻辑应用程序中使用 Filter array 并检查

{IsFolder}
False
,如下所示。

值 -

@body('Get_items')?['value']
@item()?['{IsFolder}']
等于
@False

enter image description here

然后,结果数组将仅包含文件属性。

现在,从此逻辑应用调用 ADF 并将此数组作为参数传递。

首先在ADF pipeline中创建一个数组参数,并且不给出任何默认值。

enter image description here

发布管道,它将反映在逻辑应用程序中,如下所示。现在,像这样传递数组。

{
"arr":@{body('Filter_array')}
}

enter image description here

例如,我已将管道值存储在管道中的数组变量中,当从逻辑应用程序触发时,它将给出这样的数组。

enter image description here

将此数组按顺序传递到管道中的 For-Each 并使用复制活动将每个文件复制到其目标。 您需要对源使用参数化链接服务,并在相对 URL 中传递 @item()['{FullPath}']

。使用 Bearer 令牌,文件将在 for 循环后复制。

© www.soinside.com 2019 - 2024. All rights reserved.