FileDownloaderActivity - 文件同步
概述
FileDownloaderActivity 是一个文件同步节点,用于从 SMB 共享文件夹同步文件到本地目录。该节点支持远程共享文件夹的身份验证、文件匹配过滤、同步模式选择以及源文件删除等功能。
基本信息
| 属性 | 值 |
|---|---|
| 显示名称 | 文件同步 |
| 类名 | FileDownloaderActivity |
| 命名空间 | CMS.Plugin.FlowManagement.Domain.FlowBusiness.Activitys |
| 基类 | ActionActivity |
| 分类 | 文件操作 |
| 可见性 | 可见(Visible = true) |
| 排序 | 20 |
配置说明
SMB 配置
| 属性名 | 显示名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| SoruceDirectoryPath | 源目录 | string | null | 远程共享文件夹路径,待同步的目录 |
| UserName | 用户名 | string | null | SMB 共享访问的用户名 |
| Password | 密码 | string | null | SMB 共享访问的密码 |
| SearchPattern | 匹配规则 | string | "*.csv" | 文件匹配模式,支持通配符 |
| SearchOption | 搜索模式 | SearchOption | TopDirectoryOnly | 搜索范围:仅顶层目录或包含子目录 |
| TargetDirectoryPath | 目标目录 | string | "FileDownloaderTempFiles" | 本地目标目录,支持绝对路径或相对路径 |
| DeleteSourceFile | 删除源文件 | bool | true | 同步完成后是否删除源文件 |
| SynchronousMode | 文件同步模式 | FileSynchronousMode | Skip | 目标文件已存在时的处理方式 |
| SavePathsContext | 流程上下文 | string | null | 存储已同步文件路径集合的上下文变量名 |
搜索模式(SearchOption)
| 枚举值 | 说明 |
|---|---|
| TopDirectoryOnly | 仅搜索顶层目录 |
| AllDirectories | 搜索所有子目录 |
文件同步模式(FileSynchronousMode)
| 枚举值 | 说明 |
|---|---|
| Skip | 跳过已存在的文件 |
| Rename | 重命名新文件(添加序号后缀) |
流程上下文
输出变量
| 变量名 | 类型 | 说明 |
|---|---|---|
| {SavePathsContext} | List<string> | 已同步的目标文件路径集合(变量名由配置指定) |
业务逻辑
执行流程
┌─────────────────────────────────────────────────────────────┐
│ FileDownloaderActivity │
├─────────────────────────────────────────────────────────────┤
│ 1. 判断源目录类型 │
│ ├─ 本地路径(如 C:\...)→ 直接访问 │
│ └─ 网络路径(如 \\server\...)→ 建立 SMB 连接 │
├─────────────────────────────────────────────────────────────┤
│ 2. 建立 SMB 连接(如需要) │
│ └─ 使用 net use 命令连接共享 │
├─────────────────────────────────────────────────────────────┤
│ 3. 扫描源目录 │
│ └─ 根据 SearchPattern 和 SearchOption 查找文件 │
├─────────────────────────────────────────────────────────────┤
│ 4. 同步文件 │
│ ├─ 检查目标文件是否存在 │
│ ├─ 根据 SynchronousMode 处理冲突 │
│ ├─ 复制文件到目标目录 │
│ └─ 删除源文件(如果配置) │
├─────────────────────────────────────────────────────────────┤
│ 5. 输出结果 │
│ └─ 将同步的文件路径存储到流程上下文 │
└─────────────────────────────────────────────────────────────┘
路径处理
- 本地路径判断:检查路径第二个字符是否为
:(如C:\) - 相对路径转换:非绝对路径会自动转换为相对于应用程序目录的绝对路径
- 目录自动创建:目标目录不存在时自动创建
文件冲突处理
| 模式 | 处理方式 |
|---|---|
| Skip | 跳过同步,保留原有文件 |
| Rename | 在文件名后添加序号,如 file-1.csv、file-2.csv |
使用示例
基本配置
{
"Name": "同步CSV文件",
"Type": "FileDownloaderActivity",
"SoruceDirectoryPath": "\\\\192.168.1.100\\share\\data",
"UserName": "admin",
"Password": "password123",
"SearchPattern": "*.csv",
"TargetDirectoryPath": "SyncFiles",
"DeleteSourceFile": true,
"SynchronousMode": "Skip",
"SavePathsContext": "SyncedFiles"
}
同步所有子目录
{
"Name": "同步所有文件",
"Type": "FileDownloaderActivity",
"SoruceDirectoryPath": "\\\\fileserver\\backup",
"UserName": "backup_user",
"Password": "backup_pwd",
"SearchPattern": "*.*",
"SearchOption": "AllDirectories",
"TargetDirectoryPath": "D:\\LocalBackup",
"DeleteSourceFile": false,
"SynchronousMode": "Rename"
}
本地目录同步
{
"Name": "本地文件同步",
"Type": "FileDownloaderActivity",
"SoruceDirectoryPath": "D:\\SourceData",
"SearchPattern": "*.xml",
"TargetDirectoryPath": "ProcessedData",
"DeleteSourceFile": true,
"SavePathsContext": "ProcessedFiles"
}
配合后续处理
┌──────────────────┐ ┌────────────── ────┐ ┌──────────────────┐
│FileDownloaderActivity│──▶│ CsvReadActivity │──▶│ DataFilterActivity│
│ 同步CSV文件 │ │ 读取同步的文件 │ │ 处理数据 │
│ SavePathsContext: │ │ │ │ │
│ "SyncedFiles" │ │ │ │ │
└──────────────────┘ └──────────────────┘ └──────────────────┘
注意事项
- 网络访问权限:确保运行账户有权限访问 SMB 共享
- 防火墙设置:确保 SMB 端口(445)未被防火墙阻止
- 凭据安全:
- 避免在配置中明文存储密码
- 建议使用配置加密或凭据管理
- 磁盘空间:确保目标目录有足够的磁盘空间
- 文件锁定:
- 源文件被占用时可能复制失败
- 删除源文件时如果被占用会记录异常但不中断流程
- 路径格式:
- 网络路径使用 UNC 格式:
\\server\share\folder - 本地路径使用标准格式:
C:\folder或相对路径
- 网络路径使用 UNC 格式:
- 性能考虑:
- 大量文件同步时注意网络带宽
- 建议在非高峰期执行大批量同步
错误处理
| 错误场景 | 处理方式 |
|---|---|
| SMB 连接失败 | 抛出异常,记录错误信息 |
| 文件复制失败 | 记录异常,继续处理下一个文件 |
| 源文件删除失败 | 记录异常,不影响同步结果 |
| 目标目录创建失败 | 抛出异常 |
相关节点
- FileCopyActivity - 文件复制节点
- FileMoveActivity - 文件移动节点
- FileReadActivity - 文件读取节点
- CsvReadActivity - CSV 读取节点
- DirectoryCopyActivity - 目录复制节点
最后更新时间: 2025-11-28