in oss/api_op_object.go [1730:1777]
func (c *Client) CompleteMultipartUpload(ctx context.Context, request *CompleteMultipartUploadRequest, optFns ...func(*Options)) (*CompleteMultipartUploadResult, error) {
var err error
if request == nil {
request = &CompleteMultipartUploadRequest{}
}
input := &OperationInput{
OpName: "CompleteMultipartUpload",
Method: "POST",
Bucket: request.Bucket,
Key: request.Key,
Parameters: map[string]string{
"encoding-type": "url",
},
}
if request.CompleteMultipartUpload != nil && len(request.CompleteMultipartUpload.Parts) > 0 {
sort.Sort(UploadParts(request.CompleteMultipartUpload.Parts))
}
marshalFns := []func(any, *OperationInput) error{
updateContentMd5,
}
unmarshalFns := []func(result any, output *OperationOutput) error{
unmarshalHeader,
}
if request.Callback != nil {
marshalFns = append(marshalFns, addCallback)
unmarshalFns = append(unmarshalFns, unmarshalCallbackBody)
} else {
unmarshalFns = append(unmarshalFns, unmarshalBodyXml, unmarshalEncodeType)
}
if err = c.marshalInput(request, input, marshalFns...); err != nil {
return nil, err
}
output, err := c.invokeOperation(ctx, input, optFns)
if err != nil {
return nil, err
}
result := &CompleteMultipartUploadResult{}
if err = c.unmarshalOutput(result, output, unmarshalFns...); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}