github.com/qiniu/go-sdk/v7@v7.27.0/storage/resume_uploader_deprecated.go (about) 1 package storage 2 3 import ( 4 "errors" 5 "io" 6 7 "github.com/qiniu/go-sdk/v7" 8 ) 9 10 // 分片上传过程中可能遇到的错误 11 var ( 12 ErrInvalidPutProgress = errors.New("invalid put progress") 13 ErrPutFailed = errors.New("resumable put failed") 14 ErrBadToken = errors.New("invalid token") 15 ) 16 17 const ( 18 // 上传一个分片失败 19 ErrUploadChunkFailed = "ErrUploadChunkFailed" 20 // 取消了分片的上传 21 ErrChunkUpCanceled = "ErrChunkUpCanceled" 22 ) 23 24 // BlockCount 用来计算文件的分块数量 25 func BlockCount(fsize int64) int { 26 return int((fsize + blockMask) >> blockBits) 27 } 28 29 // 上传进度过期错误 30 const ( 31 InvalidCtx = 701 // UP: 无效的上下文(bput),可能情况:Ctx非法或者已经被淘汰(太久未使用) 32 ) 33 34 // ChunkPutRetryer 上传分片失败时候重试接口 35 type ChunkPutRetryer interface { 36 Retry(ck *Chunk) 37 } 38 39 // Chunk表示要上传的数据块, 该片的大小不能大于4M 40 // 上传块的过程: 1. 调用接口在七牛后端创建块 2. 上传数据到该块 41 // 详细可以参考 https://developer.qiniu.com/kodo/api/1286/mkblk 42 type Chunk struct { 43 // 要上传的块数据 44 Body io.ReadSeeker 45 46 // 该片数据所属的块的大小 47 BlkSize int 48 49 // 将大的数据切成4M一块,每个块都有一个index 50 // 该片数据所属的块的index 51 Index int 52 53 // 上传该片发生的错误 54 Err error 55 56 // 是否调用了mkblk接口在后台创建了该片所属的块 57 Created bool 58 59 // 上传块的返回值 60 Ret *BlkputRet 61 } 62 63 // ShouldRetry 是否需要重新上传 64 func (b *Chunk) ShouldRetry() bool { 65 return b.Err != nil 66 } 67 68 // BlockLength 返回实际要上传的数据的长度 69 func (b *Chunk) ChunkLength() (int, error) { 70 n, err := api.SeekerLen(b.Body) 71 if err != nil { 72 return 0, err 73 } 74 return int(n), nil 75 } 76 77 // ResetBody 重置Body到开头 78 func (b *Chunk) ResetBody() error { 79 _, err := b.Body.Seek(0, io.SeekStart) 80 return err 81 } 82 83 // Reset 重置Body和Err 84 func (b *Chunk) Reset() error { 85 err := b.ResetBody() 86 if err != nil { 87 return err 88 } 89 b.Err = nil 90 return nil 91 }