CodeWF.NetWeaver 文档
dotnet9
CodeWF.NetWeaver / 文档 / 远程文件浏览

远程文件浏览

⏱ 预计阅读 5 分钟 适用于 net8.0 / net10.0 / net11.0 同步于 2026-10-01 来源: CodeWF · 文件服务简单流程.md ✎ 在 GitHub 编辑此页

说明:远程文件浏览、目录管理和文件传输能力从 CodeWF.NetWrapper 拆分到 CodeWF.NetWrapper.FileSystem。服务端和客户端需要通过 UseFileSystem() 挂接文件系统扩展后,下面流程才会由扩展包自动处理。

1. 客户端调用 TcpSocketClient.QueryFileAsync 浏览服务端目录,向服务端发送 QueryFileStart 请求,其中包含服务端目录路径

2. 服务端 TcpSocketServer 收到 QueryFileStart 后,判断本地目录是否存在

2.1. 如果目录不存在,返回 FileTransferReject,错误码 -1,表示目录不存在

2.2. 如果目录存在,查询目录下第一级所有文件及目录,返回 QueryFileStartAck 分包发送子文件或目录信息

2.2.1. 每包可发送 100 个文件或目录(每项包括:文件或目录名、文件大小、文件修改时间、是否文件还是目录)

2.2.2. 循环发送所有条目,无需等待客户端确认

2.3. 查询目录失败(异常情况),返回 FileTransferReject,错误码 -2,错误描述为异常信息

3. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知浏览服务端目录失败,输出错误码及提示

4. 客户端收到 QueryFileStartAck 后,可执行模块中远程文件列表刷新等操作

创建目录

1. 客户端调用 TcpSocketClient.CreateDirectoryAsync 创建目录,向服务端发送 CreateDirectoryStart 请求

2. 服务端收到 CreateDirectoryStart 后,判断本地目录是否存在

2.1. 如果目录已存在,直接返回 CreateDirectoryStartAck,表示创建成功

2.2. 如果目录不存在,执行创建目录操作

2.2.1. 创建成功,返回 CreateDirectoryStartAck

2.2.2. 创建失败,返回 FileTransferReject,错误码 -11,错误描述为异常信息

3. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知创建失败,输出错误码及提示

4. 客户端收到 CreateDirectoryStartAck 后,可执行模块中远程文件列表刷新等操作

删除文件或目录

1. 客户端调用 TcpSocketClient.DeleteAsync 删除文件或目录,向服务端发送 DeleteFileStart 请求

2. 服务端收到 DeleteFileStart 后,判断本地文件或目录是否存在

2.1. 如果文件或目录不存在,返回 FileTransferReject,错误码 -21,表示文件或目录不存在

2.2. 如果文件或目录存在,执行删除操作

2.2.1. 删除成功,返回 DeleteFileStartAck

2.2.2. 删除失败,返回 FileTransferReject,错误码 -22,错误描述为异常信息

3. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知删除失败,输出错误码及提示

4. 客户端收到 DeleteFileStartAck 后,可执行界面远程文件刷新等操作

文件上传(支持断点续传)

1. 客户端调用 TcpSocketClient.StartFileUploadAsync 上传文件,向服务端发送 FileUploadStart 请求,其中包含本地已有文件大小信息

2. 服务端 TcpSocketServer 收到 FileUploadStart 后,判断本地文件状态

2.1. 如果服务端文件不存在,或文件大小小于客户端已有文件大小,返回 FileUploadStartAck 确认接收

2.1.1. 客户端收到 FileUploadStartAck 后,根据服务端已有文件大小偏移,分包发送文件数据 FileBlockData,等待服务端确认接收

2.1.2. 注意:不能使用循环发送,需要一包传送、一包响应后再继续传送下一包

2.1.3. 服务端收到 FileBlockData 后,执行文件写入操作(偏移量根据服务端已有文件大小),写入数据根据 FileBlockData 大小,接着响应客户端 FileBlockAck 确认块接收

2.1.4. 客户端收到 FileBlockAck 后,继续发送下一个 FileBlockData,并通过 FileTransferProgress 事件通知当前传输进度

2.2. 如果服务端文件存在,且文件大小大于客户端已有文件大小,返回 FileTransferReject,错误码 -31,表示服务端文件大于客户端已有文件

2.2.1. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知上传失败,提示文件大小大于客户端已有文件,可选择删除服务端文件再上传

2.3. 如果服务端文件存在,且文件大小等于客户端已有文件大小,校验 Hash

2.3.1. 如果 Hash 相同,返回 FileTransferReject,错误码 -32,表示文件已存在,无需重复上传

2.3.2. 如果 Hash 不同,返回 FileTransferReject,错误码 -33,表示文件大小相同但 Hash 不同,拒绝上传

2.3.3. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知上传失败,输出对应错误码的提示信息,错误码 -32 提示文件已存在,无需重复上传,错误码 -33 提示文件大小相同但 Hash 不同,可选择删除服务端文件再上传

文件下载(支持断点续载)

1. 客户端调用 TcpSocketClient.StartFileDownloadAsync 下载文件,向服务端发送 FileDownloadStart 请求,其中含有本地已有文件大小信息

2. 服务端 TcpSocketServer 收到 FileDownloadStart 后,判断本地文件状态

2.1. 如果服务端文件不存在,返回 FileTransferReject,错误码 -41,表示服务端文件不存在

2.1.1. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知下载失败,提示服务端文件不存在

2.2. 如果服务端文件存在,但文件大小小于客户端已有文件大小,返回 FileTransferReject,错误码 -42,表示服务端文件小于客户端已有文件

2.2.1. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知下载失败,提示服务端文件小于客户端文件

2.3. 如果服务端文件存在,且文件大小等于客户端已有文件大小,校验 Hash

2.3.1. 如果 Hash 相同,返回 FileTransferReject,错误码 -43,表示文件相同,不需要下载

2.3.2. 如果 Hash 不同,返回 FileTransferReject,错误码 -44,表示文件大小相同但 Hash 不同

2.3.3. 客户端收到 FileTransferReject 后,通过 FileTransferProgress 事件通知下载失败,错误码 -43 提示文件相同不需要下载,错误码 -44 提示文件大小相同但 Hash 不同,可选择删除本地文件后再下载

2.4. 服务端响应 FileDownloadStartAck,准备分块发送文件

2.4.1. 服务端根据客户端已有文件大小偏移,分包发送文件数据 FileBlockData,等待客户端确认接收

2.4.2. 注意:不能使用循环发送,需要一包传送、一包响应后再继续传送下一包

2.4.3. 客户端收到 FileBlockData 后,执行文件写入操作(偏移量根据客户端已有文件大小),写入数据根据 FileBlockData 大小,接着响应服务端 FileBlockAck 确认块接收,并通过 FileTransferProgress 事件通知当前传输进度

2.4.4. 服务端收到 FileBlockAck 后,继续发送下一个 FileBlockData