使用Logic Apps将SharePoint文件复制到Azure Blob并保留文件夹结构
业务场景说明
SharePoint文档库的Document文件夹下包含两个父文件夹,多层嵌套结构如下:
- Result文件夹:
Result → Result1 → Result2 → test.xlsx - Test文件夹:
Test → Folder1 → Folder2 → Folder3 → file1.xlsx、file2.xlsx、file3.xlsx
需要通过Logic Apps将这些文件复制到Azure Blob存储,并完整保留原有的文件夹层级结构。
核心实现逻辑
要保留嵌套结构,关键是精准提取文件在SharePoint中的相对路径,并将该路径直接映射为Azure Blob的存储路径。
详细流程配置
1. 设置触发器
选择「当文件被创建或修改(属性仅)」作为流程触发器,配置指向SharePoint的Document根文件夹,开启递归扫描所有子文件夹选项,确保能捕获多层嵌套的文件。
2. 获取文件内容
添加「获取文件内容」动作,引用触发器返回的文件标识符参数,获取文件的二进制内容。
3. 提取相对路径
添加「组合」动作,使用以下表达式计算文件相对于Document根文件夹的完整路径:
replace(triggerBody()?['{Path}'], '/Shared Documents/', '')
(注:/Shared Documents/为SharePoint文档库默认根路径,若你的库名称不同,需对应修改)
该表达式会输出类似Result/Result1/Result2/test.xlsx的完整相对路径,包含所有嵌套层级。
4. 写入Azure Blob
添加「创建Blob」动作,配置目标Azure存储账户和容器:
- Blob名称:直接引用步骤3中组合得到的相对路径
- Blob内容:引用步骤2获取的文件内容
这样文件就会自动按照原有的嵌套结构存储到Blob容器中。
5. 空文件夹同步(可选)
若需要同步空文件夹结构,可在步骤3后添加「创建文件夹」动作,使用以下表达式提取文件所在的文件夹路径:
join(split(triggerBody()?['{Path}'], '/')[0..sub(length(split(triggerBody()?['{Path}'], '/')),2)], '/')
将该路径作为Blob存储的文件夹路径,确保空文件夹也能被创建。
现有流程调整建议
从你提供的流程截图来看,问题大概率出在未正确提取完整嵌套路径,导致文件无法按原层级存储。按照上述路径提取表达式重新配置Blob名称参数,即可解决结构丢失的问题。
内容的提问来源于stack exchange,提问作者Hemant Kumar

