uploads

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: Aug 1, 2024 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxSessions    = 3                // 允许的最大并发会话数
	SessionTimeout = 10 * time.Minute // 会话超时时间设置为10分钟
	MaxConcurrency = 20               // 任务允许的最大并发上传数
	TotalShares    = 3                // Shamir秘密共享方案的总份额数
	Threshold      = 2                // Shamir秘密共享方案的阈值,即需要恢复秘密的最小份额数
)

Variables

View Source
var (
	// 对等距离
	StreamPeerDistanceProtocol = fmt.Sprintf("defs@stream/peer/distance/%s", version)

	// 发送任务到网络
	StreamSendingToNetworkProtocol = fmt.Sprintf("defs@stream/sending/network/%s", version)
)

Functions

func Distance

func Distance(id1, id2 peer.ID) (*big.Int, error)

Distance 计算两个ID之间的XOR距离。

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 ErrorType

type ErrorType string

ErrorType 定义了错误的类型,用于分类不同来源的错误

const (
	ErrorTypeSystem  ErrorType = "System"  // 系统错误,指示上传过程中发生的系统级别错误,如资源不足、服务不可达等
	ErrorTypeFile    ErrorType = "File"    // 文件错误,指示与文件相关的错误,如文件损坏、文件格式不支持等
	ErrorTypeNetwork ErrorType = "Network" // 网络错误,指示上传过程中遇到的网络问题,如连接断开、超时等
	ErrorTypeStorage ErrorType = "Storage" // 存储错误,指示存储操作失败的问题,如磁盘空间不足、权限问题等
)

type EventType

type EventType string

EventType 定义了上传事件的类型,用于区分不同的事件,如任务状态更新和错误通知

const (
	EventTypeStatusUpdate EventType = "StatusUpdate" // 表示任务状态更新事件
	EventTypeError        EventType = "Error"        // 表示错误通知事件
)

type FileMeta

type FileMeta struct {
	FileID      string // 文件唯一标识,用于在系统内部唯一区分文件
	Name        string // 文件名,包括扩展名,描述文件的名称
	Extension   string // 文件的扩展名
	Size        int64  // 文件大小,单位为字节,描述文件的总大小
	ContentType string // MIME类型,表示文件的内容类型,如"text/plain"
	Checksum    []byte // 文件的校验和,用于在上传前后验证文件的完整性和一致性
}

FileMeta 代表文件的基本元数据信息 它为文件上传提供了必要的描述信息,如文件大小、类型等

func NewFileMeta

func NewFileMeta(file afero.File, privateKey *ecdsa.PrivateKey) (*FileMeta, error)

NewFileMeta 创建并初始化一个新的 FileMeta 实例,提供文件的基本元数据信息。 参数:

  • file: afero.File 文件对象。
  • privateKey: *ecdsa.PrivateKey ECDSA 私钥,用于生成文件ID。

返回值:

  • *FileMeta: 新创建的 FileMeta 实例,包含文件的基本元数据。
  • error: 如果发生错误,返回错误信息。

func (*FileMeta) CalculateShards

func (meta *FileMeta) CalculateShards(opt *opts.Options) (int64, int64, error)

CalculateShards 根据文件大小和存储选项计算数据分片和奇偶校验分片的数量。 参数:

  • opt: *opts.Options 存储选项,包含存储模式和其他参数。

返回值:

  • int64: 数据分片数。
  • int64: 奇偶校验分片数。
  • 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 NewUploadManagerInput struct {
	fx.In
	LC  fx.Lifecycle
	Ctx context.Context // 全局上下文
}

type NewUploadManagerOutput

type NewUploadManagerOutput struct {
	fx.Out
	Upload *UploadManager // 管理所有上传会话
}

func NewUploadManager

func NewUploadManager(input NewUploadManagerInput) (out NewUploadManagerOutput, err error)

NewUploadManager 创建并初始化一个新的UploadManager实例

type PeerDistanceInfo

type PeerDistanceInfo struct {
	Peer peer.ID
	Dist *big.Int
}

PeerDistanceInfo 包含单个peer的距离信息

type PeerDistanceReq

type PeerDistanceReq struct {
	SegmentID     string   // 文件片段的唯一标识
	Size          int      // 分片大小,单位为字节,描述该片段的数据量大小
	IsRsCodes     bool     // 标记该分片是否使用了纠删码技术,用于数据的恢复和冗余
	ExcludedPeers []string // 需要过滤的节点ID列表
}

对等距离的请求消息

type PeerInfo

type PeerInfo struct {
	IDs     []peer.ID // 节点的ID数组
	IsLocal bool      // 是否有本地节点为最近节点的标志
}

PeerInfo 表示一组网络节点的基本信息,包括节点ID数组、与给定ID的距离,以及最近的节点是否为本地节点的标志。

func FindNearestPeer

func FindNearestPeer(targetID peer.ID, peers []peer.ID) (*PeerInfo, error)

FindNearestPeer 根据给定的目标ID和一组节点ID,找到并返回按距离排序的节点信息数组。 func FindNearestPeer(targetID []byte, peers []peer.ID) (*PeerInfo, error) {

type RegisterStreamProtocolInput

type RegisterStreamProtocolInput struct {
	fx.In
	LC     fx.Lifecycle
	Ctx    context.Context     // 全局上下文
	Opt    *opts.Options       // 文件存储选项配置
	Afe    afero.Afero         // 文件系统接口
	P2P    *dep2p.DeP2P        // 网络主机
	PubSub *pubsub.DeP2PPubSub // 网络订阅
	Upload *UploadManager      // 管理所有上传任务
}

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) PeriodicSend

func (task *UploadTask) PeriodicSend()

PeriodicSend 定时任务,发送数据到网络

func (*UploadTask) SegmentReadySingleChan

func (task *UploadTask) SegmentReadySingleChan()

SegmentReadySingleChan 向任务的通知准备好本地存储文件片段的通道发送通知。 如果通道已满,会先丢弃旧消息再写入新消息,确保通道始终保持最新的通知。

func (*UploadTask) SendToNetworkChan

func (task *UploadTask) SendToNetworkChan(index int)

SendToNetworkChan 向网络发送已存储文件片段的动作的通道发送通知。 如果通道已满,会先丢弃旧消息再写入新消息,确保通道始终保持最新的通知。

func (*UploadTask) SendingSliceToNetwork

func (task *UploadTask) SendingSliceToNetwork(afe afero.Afero, p2p *dep2p.DeP2P, index int)

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 的可序列化版本

Jump to

Keyboard shortcuts

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