github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/resumable_upload_v1_make_block/api.go (about) 1 // THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY! 2 3 // 为后续分片上传创建一个新的块,同时上传第一片数据 4 package resumable_upload_v1_make_block 5 6 import ( 7 "encoding/json" 8 9 io "github.com/qiniu/go-sdk/v7/internal/io" 10 errors "github.com/qiniu/go-sdk/v7/storagev2/errors" 11 uptoken "github.com/qiniu/go-sdk/v7/storagev2/uptoken" 12 ) 13 14 // 调用 API 所用的请求 15 type Request struct { 16 BlockSize int64 // 块大小,单位为字节,每块均为 4 MB,最后一块大小不超过 4 MB 17 UpToken uptoken.Provider // 上传凭证,如果为空,则使用 HTTPClientOptions 中的 UpToken 18 Body io.ReadSeekCloser // 请求体 19 } 20 21 // 获取 API 所用的响应 22 type Response struct { 23 Ctx string // 本次上传成功后的块级上传控制信息,用于后续上传片(bput)及创建文件(mkfile) 24 Checksum string // 上传块 SHA1 值,使用 URL 安全的 Base64 编码 25 Crc32 int64 // 上传块 CRC32 值,客户可通过此字段对上传块的完整性进行校验 26 Offset int64 // 下一个上传块在切割块中的偏移 27 Host string // 后续上传接收地址 28 ExpiredAt int64 // `ctx` 过期时间 29 } 30 31 // 返回下一片数据的上传信息 32 type ( 33 NewBlockInfo = Response 34 jsonResponse struct { 35 Ctx string `json:"ctx"` // 本次上传成功后的块级上传控制信息,用于后续上传片(bput)及创建文件(mkfile) 36 Checksum string `json:"checksum"` // 上传块 SHA1 值,使用 URL 安全的 Base64 编码 37 Crc32 int64 `json:"crc32"` // 上传块 CRC32 值,客户可通过此字段对上传块的完整性进行校验 38 Offset int64 `json:"offset"` // 下一个上传块在切割块中的偏移 39 Host string `json:"host"` // 后续上传接收地址 40 ExpiredAt int64 `json:"expired_at"` // `ctx` 过期时间 41 } 42 ) 43 44 func (j *Response) MarshalJSON() ([]byte, error) { 45 if err := j.validate(); err != nil { 46 return nil, err 47 } 48 return json.Marshal(&jsonResponse{Ctx: j.Ctx, Checksum: j.Checksum, Crc32: j.Crc32, Offset: j.Offset, Host: j.Host, ExpiredAt: j.ExpiredAt}) 49 } 50 51 func (j *Response) UnmarshalJSON(data []byte) error { 52 var nj jsonResponse 53 if err := json.Unmarshal(data, &nj); err != nil { 54 return err 55 } 56 j.Ctx = nj.Ctx 57 j.Checksum = nj.Checksum 58 j.Crc32 = nj.Crc32 59 j.Offset = nj.Offset 60 j.Host = nj.Host 61 j.ExpiredAt = nj.ExpiredAt 62 return nil 63 } 64 65 func (j *Response) validate() error { 66 if j.Ctx == "" { 67 return errors.MissingRequiredFieldError{Name: "Ctx"} 68 } 69 if j.Checksum == "" { 70 return errors.MissingRequiredFieldError{Name: "Checksum"} 71 } 72 if j.Host == "" { 73 return errors.MissingRequiredFieldError{Name: "Host"} 74 } 75 if j.ExpiredAt == 0 { 76 return errors.MissingRequiredFieldError{Name: "ExpiredAt"} 77 } 78 return nil 79 }