使用Data Factory复制SharePoint文件至Blob容器:仅获单个文件问题排查
核心问题排查
当前管道只能取单个文件的原因有三个:
- Get Metadata调用的API仅返回当前目录文件,未递归子文件夹
- 复制活动硬编码取了第一个文件的ID,未遍历所有返回结果
- 未添加PDF文件过滤规则
具体修复步骤
1. 调整Get Metadata的API URL,递归拉取所有PDF
把原URL替换为以下API地址,开启递归并过滤PDF格式文件:
https://cactuscompany.sharepoint.com/sites/cactuscompany/_api/web/GetFolderByServerRelativeUrl('/sites/mydatateam/Shared Documents/General/Global/the_data_I_need/')/Files?$filter=endswith(Name, '.pdf')&$recursiveAll=true
$recursiveAll=true:强制递归当前文件夹及所有嵌套子文件夹$filter=endswith(Name, '.pdf'):仅保留PDF格式文件(若需忽略大小写,可改为endswith(toLower(Name), '.pdf'))
2. 添加Foreach活动遍历所有文件
在Get Metadata活动后新增Foreach活动:
- 将
Items属性设置为@activity('get metadata').output.value,实现遍历Get Metadata返回的所有文件列表 - 将原有的复制活动拖拽到Foreach容器内部
3. 修改复制活动的文件路径表达式
把原表达式中固定取第一个文件的activity('get metadata').output.value[0]替换为循环变量item(),最终表达式为:
@concat(replace(item()['odata.id'],'https://cactuscompany.sharepoint.com/',''),'/$value')
这样每次循环都会自动获取当前遍历到的文件ID,而非固定只取第一个文件。
4. Blob端配置确保不保留目录结构
在Blob数据集的文件名字段中填写@item()['Name'],所有PDF文件会直接存入Blob容器根目录,不会生成原SharePoint的子文件夹结构。
测试验证
- 单独运行Get Metadata活动,检查输出的
value数组是否包含所有子文件夹中的PDF文件 - 运行完整管道,确认Blob容器内所有PDF文件复制成功,且无多余子目录
内容的提问来源于stack exchange,提问作者cesalomx
相关产品推荐
相关产品推荐

