如何在Azure Data Factory中通过HTTP连接从WebDAV服务器复制当日文件?
从WebDAV服务器动态复制当日文件到Azure Blob的实现方案
核心思路
ADF的HTTP连接器不支持通配符匹配,因此需要先通过WebDAV标准的PROPFIND方法获取目标目录的文件列表,筛选出符合当日日期前缀的文件后,再逐个复制到Blob存储。
具体步骤
1. 配置WebDAV的HTTP连接
创建HTTP类型的链接服务,基础URL填写WebDAV服务器的根地址,认证方式选择与服务器匹配的类型(如基本认证),确保连接能正常访问目标服务器。2. 用Web活动拉取目标目录的文件列表
添加一个Web活动,配置参数如下:- 连接:选择刚创建的HTTP连接
- 请求方法:
PROPFIND - 相对URL:
src/order/ - 请求头:添加
Depth: 1(表示仅获取当前目录的文件,不递归子目录)
该请求会返回XML格式响应,包含目录下所有文件的完整路径信息。
3. 筛选符合当日日期的文件
先创建一个数组类型的变量(例如命名为filteredFiles),用于存储筛选后的文件路径。接着添加For Each活动,通过表达式处理Web活动的响应:- 提取所有文件路径:
@xpath(activity('Web活动名称').output, '//*[local-name()="href"]/text()')(忽略XML命名空间,直接提取href标签的文本内容) - 筛选目标文件:将For Each的输入设为
@filter(上述路径数组, contains(item(), concat('orderExport-Invoice-', formatDateTime(utcnow(), 'yyyyMMdd'))))(注意日期格式要与文件名一致,示例中应为yyyyMMdd,避免写成yyyyddMM)
- 提取所有文件路径:
4. 遍历复制文件到Blob存储
在For Each活动内部添加Copy Activity:- 源数据集:使用HTTP数据集,相对URL设置为
@item()(即当前遍历到的目标文件路径) - 目标数据集:Azure Blob数据集,目标文件路径可设为
@concat('指定目标目录/', split(item(), '/')[sub(length(split(item(), '/')), 1)]),以此保留原文件名并存储到Blob的指定目录下。
- 源数据集:使用HTTP数据集,相对URL设置为
注意事项
- 若WebDAV服务器部署在私网环境,需为ADF配置自托管集成运行时才能正常访问
- 确认目标WebDAV服务器允许
PROPFIND请求,部分服务器可能会限制该方法的使用 - 测试阶段可先将日期值固定为示例中的
'20240301'验证筛选逻辑,再替换为动态的utcnow()表达式
内容的提问来源于stack exchange,提问作者user2783444
相关产品推荐
相关产品推荐

