transfer

package
v1.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2026 License: GPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package transfer 提供文件传输的通用进度原语:进度事件结构、唯一传输 ID 生成、 以及"节流 + 测速"的进度上报器。SFTP、ZMODEM(lrzsz) 等所有文件传输共用一套, 避免各自重复实现节流/测速逻辑,也让前端订阅同一份进度事件形状。

Index

Constants

View Source
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

func GenerateID(prefix string) string

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 节流)。

func (*ProgressReader) Read added in v1.10.0

func (p *ProgressReader) Read(b []byte) (int, error)

type Reporter

type Reporter struct {
	// contains filtered or unexported fields
}

Reporter 把高频的字节进度收敛成"每 100ms 一条 + 整体平均速率"的进度事件。 每个传输持有独立 Reporter;同一传输的 Report 调用必须串行(拷贝循环 / 单链 await 天然满足),因此内部不加锁。"done"/"error" 等终态不受节流影响、立即发出。

func NewReporter

func NewReporter(emit func(Progress)) *Reporter

NewReporter 创建一个以真实时钟计时的进度上报器。

func (*Reporter) Report

func (r *Reporter) Report(p Progress)

Report 上报一次进度。"progress" 状态按 minInterval 节流并补齐平均速率; 其余终态(done/error)立即发出。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL