"github.com/volcengine/ve-tos-golang-sdk/v2/tos"
func checkErr(err error) {
if serverErr, ok := err.(*tos.TosServerError); ok {
fmt.Println("Error:", serverErr.Error())
fmt.Println("Request ID:", serverErr.RequestID)
fmt.Println("Response Status Code:", serverErr.StatusCode)
fmt.Println("Response Header:", serverErr.Header)
fmt.Println("Response Err Code:", serverErr.Code)
fmt.Println("Response Err Msg:", serverErr.Message)
} else if clientErr, ok := err.(*tos.TosClientError); ok {
fmt.Println("Error:", clientErr.Error())
fmt.Println("Client Cause Err:", clientErr.Cause.Error())
fmt.Println("Error:", err)
accessKey = os.Getenv("TOS_ACCESS_KEY")
secretKey = os.Getenv("TOS_SECRET_KEY")
endpoint = "https://tos-cn-beijing.volces.com"
srcBucketName = "*** Provide your bucket name ***"
dstBucketName = "*** Provide your dst bucket name ***"
srcObjectKey = "srcObjectKey"
dstObjectKey = "objectKey"
ctx = context.Background()
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
headOutput, err := client.HeadObjectV2(ctx, &tos.HeadObjectV2Input{
totalSize := headOutput.ContentLength
partSize := tos.DefaultPartSize
createMultiOutput, err := client.CreateMultipartUploadV2(ctx, &tos.CreateMultipartUploadV2Input{
uploadId := createMultiOutput.UploadID
parts := make([]tos.UploadedPartV2, 0)
for offset < totalSize {
end := offset + int64(numToUpload) - 1
output, err := client.UploadPartCopyV2(ctx, &tos.UploadPartCopyV2Input{
SrcBucket: srcBucketName,
CopySourceRangeStart: offset,
CopySourceRangeEnd: end,
fmt.Println("UploadPartCopyV2 Request ID:", output.RequestID)
parts = append(parts, tos.UploadedPartV2{
PartNumber: output.PartNumber,
offset += int64(numToUpload)
completeOutput, err := client.CompleteMultipartUploadV2(ctx, &tos.CompleteMultipartUploadV2Input{
fmt.Println("CompleteMultipartUploadV2 Request ID:", completeOutput.RequestID)