如何使用Logic App将SFTP多子目录文件按原结构迁移到SharePoint文档库
核心逻辑为提取SFTP文件的相对路径,在SharePoint端动态创建缺失目录后上传文件,无需硬编码适配任意层级的嵌套目录结构。
前置配置
首先确保SFTP侧的触发/查询动作开启包含嵌套项开关:
- 若使用事件触发,选择「当SFTP文件添加或修改时(仅属性)」触发,勾选包含嵌套子目录选项
- 若使用全量同步,选择「列出SFTP指定路径下所有文件」动作,开启递归查询选项
步骤1:裁剪获取文件相对路径
从SFTP返回的文件完整路径中,裁剪掉根同步目录的前缀,得到文件的相对路径。
假设你需要同步的SFTP根目录为folder/new/demo/,示例表达式如下:substring(triggerBody()?['FullPath'], add(indexOf(triggerBody()?['FullPath'], 'folder/new/demo/'), 16))
注:表达式中的16为根目录字符串
folder/new/demo/的字符长度,你可以根据自己的实际根目录长度调整。
执行后将得到test/sample.csv、test1/sample3.csv、test/practice/sample5.csv这类相对路径。
步骤2:拆分提取子目录路径
将相对路径按/拆分后去掉末尾的文件名,得到需要在SharePoint侧创建的子目录路径,示例表达式如下:join(take(split(variables('相对路径'), '/'), sub(length(split(variables('相对路径'), '/')), 1)), '/')
比如相对路径为test/practice/sample5.csv时,该步骤输出结果为test/practice。
步骤3:动态创建SharePoint目录
调用SharePoint「创建新文件夹」动作:
- 站点地址选择你的目标SharePoint站点
- 库名称选择目标文档库
- 文件夹路径填入步骤2输出的子目录路径
该动作会自动判断目录是否存在,已存在的路径不会重复创建也不会报错。
步骤4:上传文件到对应目录
调用SharePoint「创建文件」动作:
- 文件夹路径填入步骤3输出的完整文件夹路径
- 文件名填入表达式
last(split(variables('相对路径'), '/'))自动提取文件名 - 文件内容选择SFTP动作输出的二进制文件内容即可
常见问题排查
- 目录层级重复:检查步骤1的根目录裁剪起始位置是否正确
- 中文路径乱码:确认SFTP连接配置的编码设置为UTF-8
- 嵌套文件漏同步:确认SFTP动作已开启「包含嵌套项」配置
内容的提问来源于stack exchange,提问作者Parker
相关产品推荐
相关产品推荐

