func()

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
}