浏览 128
分享
完成分块上传
功能说明
组装指定 UploadId 中所有的分块为一个完整的文件,文件最终大小必须大于1MB,否则会返回错误。
方法原型
func (s *ObjectService) CompleteMultipartUpload(ctx context.Context, key, uploadID string, opt *CompleteMultipartUploadOptions) (*CompleteMultipartUploadResult, *Response, error)
请求示例
// 封装 UploadPart 接口返回 etag 信息
func uploadPart(c *cos.Client, name string, uploadID string, blockSize, n int) string {
b := make([]byte, blockSize)
if _, err := rand.Read(b); err != nil {
panic(err)
}
s := fmt.Sprintf("%X", b)
f := strings.NewReader(s)
// 当传入参数f不是 bytes.Buffer/bytes.Reader/strings.Reader 时,必须指定 opt.ContentLength
//opt := &cos.ObjectUploadPartOptions{
// ContentLength: size,
//}
resp, err := c.Object.UploadPart(
context.Background(), name, uploadID, n, f, nil,
)
if err != nil {
panic(err)
}
return resp.Header.Get("Etag")
}
// Init, UploadPart and Complete process
key := "test/test_complete_upload.go"
v, resp, err := client.Object.InitiateMultipartUpload(context.Background(), key, nil)
uploadID := v.UploadID
blockSize := 1024 * 1024 * 3
opt := &cos.CompleteMultipartUploadOptions{}
for i := 1; i < 5; i++ {
// 调用上面封装的接口获取 etag 信息
etag := uploadPart(c, key, uploadID, blockSize, i)
opt.Parts = append(opt.Parts, cos.Object{
PartNumber: i, ETag: etag},
)
}
v, resp, err = client.Object.CompleteMultipartUpload(
context.Background(), key, uploadID, opt,
)
参数说明
type CompleteMultipartUploadOptions struct {
Parts []Object
}
type Object struct {
ETag string
PartNumber int
}
参数名称 | 参数描述 | 类型 | 必填 |
---|---|---|---|
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg 中,对象键为 doc1/pic1.jpg | string | 是 |
UploadId | 标识分块上传的 ID,由 InitiateMultipartUpload 生成 | string | 是 |
CompleteMultipartUploadOptions | 所有分块的 ETag 和 PartNumber 信息 | struct | 是 |
返回结果说明
type CompleteMultipartUploadResult struct {
Location string
Bucket string
Key string
ETag string
}
参数名称 | 参数描述 | 类型 |
---|---|---|
Location | URL 地址 | string |
Bucket | Bucket 名称,由 bucketname-appid 构成 | string |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg 中,对象键为 doc1/pic1.jpg | string |
ETag | 合并后对象的唯一标签值,该值不是对象内容的 MD5 校验值,仅能用于检查对象唯一性。如需校验文件内容,可以在上传过程中校验单个分块的 ETag 值 | string |
评论列表