完成分块上传

功能说明

组装指定 UploadId 中所有的分块为一个完整的文件,文件最终大小必须大于1MB,否则会返回错误。

方法原型

  1. func (s *ObjectService) CompleteMultipartUpload(ctx context.Context, key, uploadID string, opt *CompleteMultipartUploadOptions) (*CompleteMultipartUploadResult, *Response, error)

请求示例

  1. // 封装 UploadPart 接口返回 etag 信息
  2. func uploadPart(c *cos.Client, name string, uploadID string, blockSize, n int) string {
  3. b := make([]byte, blockSize)
  4. if _, err := rand.Read(b); err != nil {
  5. panic(err)
  6. }
  7. s := fmt.Sprintf("%X", b)
  8. f := strings.NewReader(s)
  9. // 当传入参数f不是 bytes.Buffer/bytes.Reader/strings.Reader 时,必须指定 opt.ContentLength
  10. //opt := &cos.ObjectUploadPartOptions{
  11. // ContentLength: size,
  12. //}
  13. resp, err := c.Object.UploadPart(
  14. context.Background(), name, uploadID, n, f, nil,
  15. )
  16. if err != nil {
  17. panic(err)
  18. }
  19. return resp.Header.Get("Etag")
  20. }
  21. // Init, UploadPart and Complete process
  22. key := "test/test_complete_upload.go"
  23. v, resp, err := client.Object.InitiateMultipartUpload(context.Background(), key, nil)
  24. uploadID := v.UploadID
  25. blockSize := 1024 * 1024 * 3
  26. opt := &cos.CompleteMultipartUploadOptions{}
  27. for i := 1; i < 5; i++ {
  28. // 调用上面封装的接口获取 etag 信息
  29. etag := uploadPart(c, key, uploadID, blockSize, i)
  30. opt.Parts = append(opt.Parts, cos.Object{
  31. PartNumber: i, ETag: etag},
  32. )
  33. }
  34. v, resp, err = client.Object.CompleteMultipartUpload(
  35. context.Background(), key, uploadID, opt,
  36. )

参数说明

  1. type CompleteMultipartUploadOptions struct {
  2. Parts []Object
  3. }
  4. type Object struct {
  5. ETag string
  6. PartNumber int
  7. }
参数名称参数描述类型必填
key对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg 中,对象键为 doc1/pic1.jpgstring
UploadId标识分块上传的 ID,由 InitiateMultipartUpload 生成string
CompleteMultipartUploadOptions所有分块的 ETag 和 PartNumber 信息struct

返回结果说明

  1. type CompleteMultipartUploadResult struct {
  2. Location string
  3. Bucket string
  4. Key string
  5. ETag string
  6. }
参数名称参数描述类型
LocationURL 地址string
BucketBucket 名称,由 bucketname-appid 构成string
Key对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg 中,对象键为 doc1/pic1.jpgstring
ETag合并后对象的唯一标签值,该值不是对象内容的 MD5 校验值,仅能用于检查对象唯一性。如需校验文件内容,可以在上传过程中校验单个分块的 ETag 值string