github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/resumable_upload_v1_bput/api.go (about)

     1  // THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY!
     2  
     3  // 上传指定块的一片数据,具体数据量可根据现场环境调整,同一块的每片数据必须串行上传
     4  package resumable_upload_v1_bput
     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  	Ctx         string            // 前一次上传返回的块级上传控制信息
    17  	ChunkOffset int64             // 当前片在整个块中的起始偏移
    18  	UpToken     uptoken.Provider  // 上传凭证,如果为空,则使用 HTTPClientOptions 中的 UpToken
    19  	Body        io.ReadSeekCloser // 请求体
    20  }
    21  
    22  // 获取 API 所用的响应
    23  type Response struct {
    24  	Ctx       string // 本次上传成功后的块级上传控制信息,用于后续上传片(bput)及创建文件(mkfile)
    25  	Checksum  string // 上传块 SHA1 值,使用 URL 安全的 Base64 编码
    26  	Crc32     int64  // 上传块 CRC32 值,客户可通过此字段对上传块的完整性进行校验
    27  	Offset    int64  // 下一个上传块在切割块中的偏移
    28  	Host      string // 后续上传接收地址
    29  	ExpiredAt int64  // `ctx` 过期时间
    30  }
    31  
    32  // 返回下一片数据的上传信息
    33  type (
    34  	ChunkInfo    = Response
    35  	jsonResponse struct {
    36  		Ctx       string `json:"ctx"`        // 本次上传成功后的块级上传控制信息,用于后续上传片(bput)及创建文件(mkfile)
    37  		Checksum  string `json:"checksum"`   // 上传块 SHA1 值,使用 URL 安全的 Base64 编码
    38  		Crc32     int64  `json:"crc32"`      // 上传块 CRC32 值,客户可通过此字段对上传块的完整性进行校验
    39  		Offset    int64  `json:"offset"`     // 下一个上传块在切割块中的偏移
    40  		Host      string `json:"host"`       // 后续上传接收地址
    41  		ExpiredAt int64  `json:"expired_at"` // `ctx` 过期时间
    42  	}
    43  )
    44  
    45  func (j *Response) MarshalJSON() ([]byte, error) {
    46  	if err := j.validate(); err != nil {
    47  		return nil, err
    48  	}
    49  	return json.Marshal(&jsonResponse{Ctx: j.Ctx, Checksum: j.Checksum, Crc32: j.Crc32, Offset: j.Offset, Host: j.Host, ExpiredAt: j.ExpiredAt})
    50  }
    51  
    52  func (j *Response) UnmarshalJSON(data []byte) error {
    53  	var nj jsonResponse
    54  	if err := json.Unmarshal(data, &nj); err != nil {
    55  		return err
    56  	}
    57  	j.Ctx = nj.Ctx
    58  	j.Checksum = nj.Checksum
    59  	j.Crc32 = nj.Crc32
    60  	j.Offset = nj.Offset
    61  	j.Host = nj.Host
    62  	j.ExpiredAt = nj.ExpiredAt
    63  	return nil
    64  }
    65  
    66  func (j *Response) validate() error {
    67  	if j.Ctx == "" {
    68  		return errors.MissingRequiredFieldError{Name: "Ctx"}
    69  	}
    70  	if j.Checksum == "" {
    71  		return errors.MissingRequiredFieldError{Name: "Checksum"}
    72  	}
    73  	if j.Host == "" {
    74  		return errors.MissingRequiredFieldError{Name: "Host"}
    75  	}
    76  	if j.ExpiredAt == 0 {
    77  		return errors.MissingRequiredFieldError{Name: "ExpiredAt"}
    78  	}
    79  	return nil
    80  }