Documentation
¶
Overview ¶
Package transfer 提供文件传输的通用进度原语:进度事件结构、唯一传输 ID 生成、 以及"节流 + 测速"的进度上报器。SFTP、ZMODEM(lrzsz) 等所有文件传输共用一套, 避免各自重复实现节流/测速逻辑,也让前端订阅同一份进度事件形状。
Index ¶
Constants ¶
const ( StatusProgress = "progress" StatusDone = "done" StatusError = "error" StatusCancelled = "cancelled" //nolint:misspell // 与前端 SFTPTransfer.status 枚举对齐(沿用英式拼写) )
传输状态。值与前端 SFTPTransfer.status 枚举对齐,是前后端的唯一约定来源。
Variables ¶
This section is empty.
Functions ¶
func Copy ¶ added in v1.10.0
func Copy(ctx context.Context, transferID string, dst io.Writer, src io.Reader, totalBytes int64, currentFile string, onProgress func(Progress)) error
Copy 以 32KiB 分片把 src 流式写入 dst,经独立 Reporter(100ms 节流)上报进度, ctx 取消即中断。镜像 sftp_svc.copyWithProgress,让每种传输源共用一套节流拷贝循环。
func GenerateID ¶
GenerateID 生成全局唯一的传输 ID,prefix 标识来源("sftp" / "zmodem"), 便于日志溯源与前端按前缀区分。
Types ¶
type Progress ¶
type Progress struct {
TransferID string `json:"transferId"`
Status string `json:"status"` // "progress" | "done" | "error"
CurrentFile string `json:"currentFile"`
FilesCompleted int `json:"filesCompleted"`
FilesTotal int `json:"filesTotal"`
BytesDone int64 `json:"bytesDone"`
BytesTotal int64 `json:"bytesTotal"`
Speed int64 `json:"speed"` // bytes/sec
Error string `json:"error,omitempty"`
}
Progress 是一次传输的进度快照,经 Wails 事件 "transfer:progress:<id>" 发往前端。 JSON tag 与前端 SFTPTransfer 一一对应,新增传输来源(如 ZMODEM)直接复用。
type ProgressReader ¶ added in v1.10.0
type ProgressReader struct {
// contains filtered or unexported fields
}
ProgressReader 包裹一个 io.Reader:在 sink 拥有读循环(如 minio PutObject)的流式上传里, 于源 reader 侧观测进度并经 Reporter 节流上报;ctx 取消即中断读取。同一传输的 Read 串行, 内部无需加锁(与 Reporter 约定一致)。
func NewProgressReader ¶ added in v1.10.0
func NewProgressReader(ctx context.Context, transferID, currentFile string, r io.Reader, total int64, onProgress func(Progress)) *ProgressReader
NewProgressReader 构造进度 reader,内部持有独立 Reporter(100ms 节流)。