Documentation
¶
Index ¶
- Constants
- Variables
- func Distance(id1, id2 peer.ID) (*big.Int, error)
- func LoadTasksFromFile(filePath string) (map[string]*UploadTaskSerializable, error)
- func NewFileSegment(opt *opts.Options, r io.Reader, fileID string, ...) (map[int]*FileSegment, error)
- func NewHashTable(segments map[int]*FileSegment, dataShards int64) map[int]*HashTable
- func RegisterUploadStreamProtocol(input RegisterStreamProtocolInput)
- func SaveTasksToFile(filePath string, tasks map[string]*UploadTaskSerializable) error
- type ControlCommand
- type ErrorType
- type EventType
- type FileMeta
- type FileSecurity
- type FileSecuritySerializable
- type FileSegment
- type FileSegmentInfo
- type HashTable
- type NetworkResponse
- type NewUploadManagerInput
- type NewUploadManagerOutput
- type PeerDistanceInfo
- type PeerDistanceReq
- type PeerInfo
- type RegisterStreamProtocolInput
- type SegmentUploadStatus
- type SendingToNetworkReq
- type SendingToNetworkRes
- type StreamProtocol
- type UploadChan
- type UploadFile
- type UploadManager
- func (manager *UploadManager) CancelUpload(taskID string) error
- func (manager *UploadManager) ClearUpload() error
- func (manager *UploadManager) ContinueUpload(taskID string) error
- func (manager *UploadManager) GetUploadChan() chan *UploadChan
- func (manager *UploadManager) IsMaxConcurrencyReached() bool
- func (manager *UploadManager) NewUpload(opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, ...) (*UploadSuccessInfo, error)
- func (manager *UploadManager) PauseUpload(taskID string) error
- func (manager *UploadManager) PeriodicSave(filePath string, interval time.Duration)
- func (manager *UploadManager) RegisterTask(opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, ...)
- func (manager *UploadManager) SaveTasksToFileSingleChan()
- type UploadStatus
- type UploadSuccessInfo
- type UploadTask
- func (task *UploadTask) ChannelEvents(opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, ...)
- func (task *UploadTask) CheckSegmentsStatus()
- func (task *UploadTask) FromSerializable(serializable *UploadTaskSerializable) error
- func (task *UploadTask) IsUploadComplete() bool
- func (task *UploadTask) PeriodicSend()
- func (task *UploadTask) SegmentReadySingleChan()
- func (task *UploadTask) SendToNetworkChan(index int)
- func (task *UploadTask) SendingSliceToNetwork(afe afero.Afero, p2p *dep2p.DeP2P, index int)
- func (task *UploadTask) SetStatusCompleted()
- func (task *UploadTask) SetStatusFailed()
- func (task *UploadTask) SetStatusPaused()
- func (task *UploadTask) SetStatusPending()
- func (task *UploadTask) SetStatusUploading()
- func (task *UploadTask) ToSerializable() (*UploadTaskSerializable, error)
- func (task *UploadTask) UploadCompleteCount() int
- func (task *UploadTask) UploadDoneSingleChan()
- type UploadTaskSerializable
Constants ¶
const ( MaxSessions = 3 // 允许的最大并发会话数 SessionTimeout = 10 * time.Minute // 会话超时时间设置为10分钟 MaxConcurrency = 20 // 任务允许的最大并发上传数 Threshold = 2 // Shamir秘密共享方案的阈值,即需要恢复秘密的最小份额数 )
Variables ¶
var ( // 对等距离 StreamPeerDistanceProtocol = fmt.Sprintf("defs@stream/peer/distance/%s", version) // 发送任务到网络 StreamSendingToNetworkProtocol = fmt.Sprintf("defs@stream/sending/network/%s", version) )
Functions ¶
func LoadTasksFromFile ¶
func LoadTasksFromFile(filePath string) (map[string]*UploadTaskSerializable, error)
LoadTasksFromFile 从文件加载任务 参数:
- filePath: string 文件路径
返回值:
- map[string]*UploadTaskSerializable: 任务映射表
- error: 如果发生错误,返回错误信息
func NewFileSegment ¶
func NewFileSegment(opt *opts.Options, r io.Reader, fileID string, capacity, dataShards, parityShards int64) (map[int]*FileSegment, error)
NewFileSegment 创建并初始化一个新的 FileSegment 实例,提供分片的详细信息及其上传状态。 参数:
- opt: *opts.Options 文件存储选项。
- r: io.Reader 文件读取器。
- fileID: string 文件唯一标识。
- capacity: int64 缓冲区容量。
- dataShards: int64 数据分片数。
- parityShards: int64 奇偶校验分片数。
返回值:
- map[int]*FileSegment: 文件分片的映射。
- error: 如果发生错误,返回错误信息。
func NewHashTable ¶
func NewHashTable(segments map[int]*FileSegment, dataShards int64) map[int]*HashTable
NewHashTable 创建并初始化一个映射,映射的键是分片的索引,值是HashTable实例。 它用于描述每个分片的哈希值和是否使用了纠删码技术。
func RegisterUploadStreamProtocol ¶
func RegisterUploadStreamProtocol(input RegisterStreamProtocolInput)
RegisterUploadStreamProtocol 注册上传流
func SaveTasksToFile ¶
func SaveTasksToFile(filePath string, tasks map[string]*UploadTaskSerializable) error
SaveTasksToFile 将任务保存到文件 参数:
- filePath: string 文件路径
- tasks: map[string]*UploadTaskSerializable 任务映射表
返回值:
- error: 如果发生错误,返回错误信息
Types ¶
type ControlCommand ¶
type ControlCommand string
ControlCommand 定义了控制上传任务的命令类型,如暂停、恢复等
const ( CommandStart ControlCommand = "start" // 开始,用于启动一项上传任务或会话 CommandPause ControlCommand = "pause" // 暂停,用于暂停正在进行的上传任务或会话 CommandResume ControlCommand = "resume" // 恢复,用于继续已暂停的上传任务或会话 CommandCancel ControlCommand = "cancel" // 取消,用于取消正在进行的上传任务或会话 )
type FileMeta ¶
type FileMeta struct { FileID string // 文件唯一标识,用于在系统内部唯一区分文件 Name string // 文件名,包括扩展名,描述文件的名称 Extension string // 文件的扩展名 Size int64 // 文件大小,单位为字节,描述文件的总大小 ContentType string // MIME类型,表示文件的内容类型,如"text/plain" Checksum []byte // 文件的校验和,用于在上传前后验证文件的完整性和一致性 }
FileMeta 代表文件的基本元数据信息 它为文件上传提供了必要的描述信息,如文件大小、类型等
func NewFileMeta ¶
NewFileMeta 创建并初始化一个新的 FileMeta 实例,提供文件的基本元数据信息。 参数:
- file: afero.File 文件对象。
- privateKey: *ecdsa.PrivateKey ECDSA 私钥,用于生成文件ID。
返回值:
- *FileMeta: 新创建的 FileMeta 实例,包含文件的基本元数据。
- error: 如果发生错误,返回错误信息。
type FileSecurity ¶
type FileSecurity struct { Secret []byte // 文件加密密钥 EncryptionKey [][]byte // 文件加密密钥,用于在上传过程中保证文件数据的安全 PrivateKey *ecdsa.PrivateKey // 文件签名密钥 P2PKHScript []byte // P2PKH 脚本,用于区块链场景中验证文件所有者的身份 P2PKScript []byte // P2PK 脚本,用于区块链场景中进行文件验签操作 }
FileSecurity 封装了文件的安全和权限相关的信息
func NewFileSecurity ¶
func NewFileSecurity(privKey *ecdsa.PrivateKey, file afero.File, scheme *shamir.ShamirScheme, secret []byte) (*FileSecurity, error)
NewFileSecurity 创建并初始化一个新的FileSecurity实例,封装了文件的安全和权限相关的信息
type FileSecuritySerializable ¶
type FileSecuritySerializable struct { Secret []byte `json:"secret"` // 文件加密密钥 EncryptionKey [][]byte `json:"encryption_key"` // 文件加密密钥 PrivateKey []byte `json:"private_key"` // 文件签名密钥的序列化字节 P2PKHScript []byte `json:"p2pkh_script"` // P2PKH 脚本 P2PKScript []byte `json:"p2pk_script"` // P2PK 脚本 }
FileSecuritySerializable 是 FileSecurity 的可序列化版本
type FileSegment ¶
type FileSegment struct { Index int // 分片索引,表示该片段在文件中的顺序 SegmentID string // 文件片段的唯一标识 Size int // 分片大小,单位为字节,描述该片段的数据量大小 Checksum []byte // 分片的校验和,用于验证该片段的完整性和一致性 IsRsCodes bool // 是否是纠删码片段 Status SegmentUploadStatus // 分片的上传状态,描述该片段的上传进度和结果 }
FileSegment 描述一个文件分片的详细信息及其上传状态 文件被分割成多个片段独立上传,以支持大文件的高效传输和断点续传
func (*FileSegment) SetStatusCompleted ¶
func (segment *FileSegment) SetStatusCompleted()
SetStatusCompleted 设置文件片段的状态为已完成
func (*FileSegment) SetStatusFailed ¶
func (segment *FileSegment) SetStatusFailed()
SetStatusFailed 设置文件片段的状态为失败
func (*FileSegment) SetStatusNotReady ¶
func (segment *FileSegment) SetStatusNotReady()
SetStatusNotReady 设置文件片段的状态为尚未准备好
func (*FileSegment) SetStatusPending ¶
func (segment *FileSegment) SetStatusPending()
SetStatusPending 设置文件片段的状态为待上传
func (*FileSegment) SetStatusUploading ¶
func (segment *FileSegment) SetStatusUploading()
SetStatusUploading 设置文件片段的状态为上传中
type FileSegmentInfo ¶
type FileSegmentInfo struct { TaskID string // 任务ID FileID string // 文件唯一标识,用于在系统内部唯一区分文件 TempStorage string // 文件的临时存储位置,用于保存文件分片的临时数据 SegmentID string // 文件片段的唯一标识 TotalSegments int // 文件总分片数 Index int // 分片索引,表示该片段在文件中的顺序 Size int // 分片大小,单位为字节,描述该片段的数据量大小 IsRsCodes bool // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余 }
FileSegmentInfo 用于发送文件片段信息到网络
type HashTable ¶
type HashTable struct { Checksum []byte // 分片的校验和,用于校验分片数据的完整性和一致性 IsRsCodes bool // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余 }
HashTable 描述分片的校验和是否属于纠删码
type NetworkResponse ¶
type NetworkResponse struct { Index int // 文件片段索引,表示该片段在文件中的顺序 ReceiverPeerID peer.ID // 接收该文件片段的节点ID }
NetworkResponse 表示从网络接收到的响应信息
type NewUploadManagerInput ¶
type NewUploadManagerOutput ¶
type NewUploadManagerOutput struct { fx.Out Upload *UploadManager // 管理所有上传会话 }
func NewUploadManager ¶
func NewUploadManager(input NewUploadManagerInput) (out NewUploadManagerOutput, err error)
NewUploadManager 创建并初始化一个新的UploadManager实例
type PeerDistanceInfo ¶
PeerDistanceInfo 包含单个peer的距离信息
type PeerDistanceReq ¶
type PeerDistanceReq struct { SegmentID string // 文件片段的唯一标识 Size int // 分片大小,单位为字节,描述该片段的数据量大小 IsRsCodes bool // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余 ExcludedPeers []string // 需要过滤的节点ID列表 }
对等距离的请求消息
type SegmentUploadStatus ¶
type SegmentUploadStatus string
SegmentUploadStatus 表示文件片段的上传状态
const ( SegmentStatusNotReady SegmentUploadStatus = "not_ready" // 尚未准备好,文件片段尚未准备好 SegmentStatusPending SegmentUploadStatus = "pending" // 待上传,文件片段已准备好待上传但尚未开始 SegmentStatusUploading SegmentUploadStatus = "uploading" // 上传中,文件片段正在上传过程中 SegmentStatusCompleted SegmentUploadStatus = "completed" // 已完成,文件片段已成功上传 SegmentStatusFailed SegmentUploadStatus = "failed" // 失败,文件片段上传失败 )
type SendingToNetworkReq ¶
type SendingToNetworkReq struct { FileID string // 文件唯一标识,用于在系统内部唯一区分文件 SegmentID string // 文件片段的唯一标识 TotalSegments int // 文件总分片数 Index int // 分片索引,表示该片段在文件中的顺序 IsRsCodes bool // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余 SliceByte []byte // 切片内容 }
发送任务到网络的请求消息
type SendingToNetworkRes ¶
type SendingToNetworkRes struct { FileID string // 文件唯一标识,用于在系统内部唯一区分文件 SegmentID string // 文件片段的唯一标识 TotalSegments int // 文件总分片数 Index int // 分片索引,表示该片段在文件中的顺序 IsRsCodes bool // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余 ID peer.ID // 节点的ID UploadAt int64 // 文件片段上传的时间戳 }
发送任务到网络的响应消息
type StreamProtocol ¶
type StreamProtocol struct { Ctx context.Context // 全局上下文 Opt *opts.Options // 文件存储选项配置 Afe afero.Afero // 文件系统接口 P2P *dep2p.DeP2P // 网络主机 PubSub *pubsub.DeP2PPubSub // 网络订阅 Upload *UploadManager // 管理所有上传任务 }
流协议
type UploadChan ¶
type UploadChan struct { TaskID string // 任务唯一标识 UploadProgress int // 上传进度百分比 IsComplete bool // 上传任务是否完成 SegmentID string // 文件片段唯一标识 SegmentIndex int // 文件片段索引,表示该片段在文件中的顺序 SegmentSize int // 文件片段大小,单位为字节 UsesErasureCodes bool // 是否使用纠删码技术 NodeID peer.ID // 存储该文件片段的节点ID UploadTime int64 // 上传完成时间的时间戳 }
UploadChan 用于表示上传任务的通道信息
type UploadFile ¶
type UploadFile struct { FileMeta // 文件的元数据,如文件名、大小、类型等 Segments map[int]*FileSegment // 文件分片信息,详细描述了文件如何被分割为多个片段进行上传 TempStorage string // 文件的临时存储位置,用于保存文件分片的临时数据 Security *FileSecurity // 文件的安全和加密相关信息 SliceTable map[int]*HashTable // 文件片段的哈希表,记录每个片段的哈希值,支持纠错和数据完整性验证 StartedAt int64 // 文件上传的开始时间戳,记录任务开始执行的时间点 FinishedAt int64 // 文件上传的完成时间戳,记录任务完成执行的时间点 }
UploadFile 包含待上传文件的详细信息及其分片信息 它是上传任务的核心部分,定义了文件如何被处理和上传
func NewUploadFile ¶
func NewUploadFile(opt *opts.Options, ownerPriv *ecdsa.PrivateKey, file afero.File, scheme *shamir.ShamirScheme) (*UploadFile, error)
NewUploadFile 创建并初始化一个新的 UploadFile 实例。 参数:
- opt: *opts.Options 文件存储选项。
- ownerPriv: *ecdsa.PrivateKey 文件所有者的私钥。
- file: afero.File 文件对象。
- scheme: *shamir.ShamirScheme Shamir 秘钥共享方案。
返回值:
- *UploadFile: 新创建的 UploadFile 实例。
- error: 如果发生错误,返回错误信息。
type UploadManager ¶
type UploadManager struct { Mu sync.Mutex // 用于保护状态的互斥锁 Tasks map[string]*UploadTask // 上传任务的映射表,键为任务ID,值为上传任务对象 UploadChan chan *UploadChan // 上传状态更新通道,用于通知外部上传进度和状态 SaveTasksToFile chan struct{} // 保存任务至文件通道 Scheme *shamir.ShamirScheme // 创建一个新的ShamirScheme实例 // contains filtered or unexported fields }
UploadManager 管理所有上传任务,提供文件上传的统一入口和管理功能 它负责协调上传任务的执行,管理任务的生命周期,以及通知任务的状态更新和错误事件
func (*UploadManager) CancelUpload ¶
func (manager *UploadManager) CancelUpload(taskID string) error
CancelUpload 取消上传操作
func (*UploadManager) ClearUpload ¶
func (manager *UploadManager) ClearUpload() error
ClearUpload 清空上传记录
func (*UploadManager) ContinueUpload ¶
func (manager *UploadManager) ContinueUpload(taskID string) error
ContinueUpload 继续上传操作
func (*UploadManager) GetUploadChan ¶
func (manager *UploadManager) GetUploadChan() chan *UploadChan
GetUploadChan 返回上传状态更新通道
func (*UploadManager) IsMaxConcurrencyReached ¶
func (manager *UploadManager) IsMaxConcurrencyReached() bool
IsMaxConcurrencyReached 检查是否达到上传允许的最大并发数
func (*UploadManager) NewUpload ¶
func (manager *UploadManager) NewUpload( opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, pubsub *pubsub.DeP2PPubSub, path string, ownerPriv *ecdsa.PrivateKey, ) (*UploadSuccessInfo, error)
NewUpload 新上传操作 参数:
- opt: *opts.Options 文件存储选项配置。
- afe: afero.Afero 文件系统接口。
- p2p: *dep2p.DeP2P 网络主机。
- pubsub: *pubsub.DeP2PPubSub 网络订阅。
- path: string 文件路径。
- ownerPriv: *ecdsa.PrivateKey 所有者的私钥。
返回值:
- *UploadSuccessInfo: 文件上传成功后的返回信息。
- error: 如果发生错误,返回错误信息。
func (*UploadManager) PauseUpload ¶
func (manager *UploadManager) PauseUpload(taskID string) error
PauseUpload 暂停上传操作
func (*UploadManager) PeriodicSave ¶
func (manager *UploadManager) PeriodicSave(filePath string, interval time.Duration)
PeriodicSave 定时保存任务数据到文件 参数:
- filePath: string 文件路径
- interval: time.Duration 保存间隔
func (*UploadManager) RegisterTask ¶
func (manager *UploadManager) RegisterTask(opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, pubsub *pubsub.DeP2PPubSub, task *UploadTask)
RegisterTask 向管理器注册一个新的上传任务。 参数:
- task: *DownloadTask 为准备注册的上传任务。
func (*UploadManager) SaveTasksToFileSingleChan ¶
func (manager *UploadManager) SaveTasksToFileSingleChan()
SaveTasksToFileChan 保存任务至文件的通知通道
type UploadStatus ¶
type UploadStatus string
UploadStatus 表示上传任务的状态
const ( StatusPending UploadStatus = "pending" // 待上传,任务已创建但尚未开始执行 StatusUploading UploadStatus = "uploading" // 上传中,任务正在执行文件上传操作 StatusPaused UploadStatus = "paused" // 已暂停,任务已被暂停,可通过恢复操作继续执行 StatusCompleted UploadStatus = "completed" // 已完成,任务已成功完成所有上传操作 StatusFailed UploadStatus = "failed" // 失败,任务由于某些错误未能成功完成 )
type UploadSuccessInfo ¶
type UploadSuccessInfo struct { TaskID string // 任务唯一标识,用于区分和管理不同的上传任务。 FileID string // 文件唯一标识,用于在系统内部唯一区分文件。 Checksum string // 文件的校验和 Name string // 文件名,包括扩展名,描述文件的名称。 Size int64 // 文件大小,单位为字节,描述文件的总大小。 TotalSlices int // 文件总切片总数,描述文件的总切片数。 Extension string // 文件的扩展名 ContentType string // MIME类型,表示文件的内容类型,如"text/plain"。 UploadTime int64 // 文件开始上传的时间。 }
UploadSuccessInfo 用于封装文件上传成功后的返回信息。
type UploadTask ¶
type UploadTask struct { Mu sync.RWMutex // 控制对Progress的并发访问 Status UploadStatus // 上传任务的当前状态,如进行中、暂停、完成等 StatusCond *sync.Cond TaskID string // 任务唯一标识,用于区分和管理不同的上传任务 File *UploadFile // 待上传的文件信息,包含文件的元数据和分片信息 Progress util.BitSet // 上传任务的进度,表示为0到100之间的百分比 SegmentReady chan struct{} // 用于通知准备好本地存储文件片段的通道 SendToNetwork chan int // 用于触发向网络发送已存储文件片段的动作的通道 UploadDone chan struct{} // 用于通知上传完成的通道 NetworkReceived chan *NetworkResponse // 用于接收网络返回的接受方节点地址信息的通道 // contains filtered or unexported fields }
UploadTask 描述一个文件上传任务,包括文件信息和上传状态 它封装了单个文件上传的细节,如文件元数据、上传进度、状态控制等
func NewUploadTask ¶
func NewUploadTask(ctx context.Context, opt *opts.Options, mu *sync.Mutex, scheme *shamir.ShamirScheme, taskID string, file afero.File, ownerPriv *ecdsa.PrivateKey) (*UploadTask, error)
NewUploadTask 创建并初始化一个新的文件上传任务实例。 taskID 为任务的唯一标识符。 file 为待上传的文件信息。 maxConcurrency 为任务允许的最大并发上传数。
func (*UploadTask) ChannelEvents ¶
func (task *UploadTask) ChannelEvents( opt *opts.Options, afe afero.Afero, p2p *dep2p.DeP2P, pubsub *pubsub.DeP2PPubSub, uploadChan chan *UploadChan, )
ChannelEvents 通道事件处理
func (*UploadTask) CheckSegmentsStatus ¶
func (task *UploadTask) CheckSegmentsStatus()
CheckSegmentsStatus 检查是否有待上传或失败的文件片段 返回值:bool 是否存在待上传或失败的文件片段
func (*UploadTask) FromSerializable ¶
func (task *UploadTask) FromSerializable(serializable *UploadTaskSerializable) error
FromSerializable 从可序列化的结构体恢复 UploadTask 参数:
- serializable: *UploadTaskSerializable 可序列化的 UploadTask 结构体
func (*UploadTask) IsUploadComplete ¶
func (task *UploadTask) IsUploadComplete() bool
IsUploadComplete 检查指定文件的上传是否完成
func (*UploadTask) SegmentReadySingleChan ¶
func (task *UploadTask) SegmentReadySingleChan()
SegmentReadySingleChan 向任务的通知准备好本地存储文件片段的通道发送通知。 如果通道已满,会先丢弃旧消息再写入新消息,确保通道始终保持最新的通知。
func (*UploadTask) SendToNetworkChan ¶
func (task *UploadTask) SendToNetworkChan(index int)
SendToNetworkChan 向网络发送已存储文件片段的动作的通道发送通知。 如果通道已满,会先丢弃旧消息再写入新消息,确保通道始终保持最新的通知。
func (*UploadTask) SendingSliceToNetwork ¶
SendingSliceToNetwork 发送文件片段到网络。 参数:
- afe: 文件系统接口,用于读取文件片段。
- p2p: P2P网络对象。
- index: 文件片段索引。
- networkReceivedChan: 网络响应通道,用于发送网络响应结果。
func (*UploadTask) SetStatusCompleted ¶
func (task *UploadTask) SetStatusCompleted()
SetStatusCompleted 设置上传任务的状态为已完成
func (*UploadTask) SetStatusFailed ¶
func (task *UploadTask) SetStatusFailed()
SetStatusFailed 设置上传任务的状态为失败
func (*UploadTask) SetStatusPaused ¶
func (task *UploadTask) SetStatusPaused()
SetStatusPaused 设置上传任务的状态为已暂停
func (*UploadTask) SetStatusPending ¶
func (task *UploadTask) SetStatusPending()
SetStatusPending 设置上传任务的状态为待上传
func (*UploadTask) SetStatusUploading ¶
func (task *UploadTask) SetStatusUploading()
SetStatusUploading 设置上传任务的状态为上传中
func (*UploadTask) ToSerializable ¶
func (task *UploadTask) ToSerializable() (*UploadTaskSerializable, error)
ToSerializable 将 UploadTask 转换为可序列化的结构体 返回值:
- *UploadTaskSerializable: 可序列化的 UploadTask 结构体
- error: 如果发生错误,返回错误信息
func (*UploadTask) UploadCompleteCount ¶
func (task *UploadTask) UploadCompleteCount() int
UploadCompleteCount 检查已经完成的数量
func (*UploadTask) UploadDoneSingleChan ¶
func (task *UploadTask) UploadDoneSingleChan()
UploadDoneSingleChan 向任务的通知上传完成的通道发送通知。 如果通道已满,会先丢弃旧消息再写入新消息,确保通道始终保持最新的通知。
type UploadTaskSerializable ¶
type UploadTaskSerializable struct { TaskID string `json:"task_id"` // 任务唯一标识 FileMeta *FileMeta `json:"file_meta"` // 文件元数据 Segments map[int]*FileSegment `json:"segments"` // 文件分片信息 TempStorage string `json:"temp_storage"` // 文件的临时存储位置 SliceTable map[int]*HashTable `json:"slice_table"` // 文件片段的哈希表 StartedAt int64 `json:"started_at"` // 文件上传的开始时间戳 FinishedAt int64 `json:"finished_at"` // 文件上传的完成时间戳 Progress util.BitSet `json:"progress"` // 上传任务的进度 Status UploadStatus `json:"status"` // 上传任务的状态 FileSecurity *FileSecuritySerializable `json:"file_security"` // 文件安全信息 }
UploadTaskSerializable 是 UploadTask 的可序列化版本