"github.com/volcengine/ve-tos-golang-sdk/v2/tos"
"github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum"
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")
// Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com
endpoint = "https://tos-cn-beijing.volces.com"
bucketName = "*** Provide your bucket name ***"
objectKey = "*** Provide your object name ***"
ctx = context.Background()
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
// 初始化分片,指定对象权限为私有,存储类型为标准存储并设置元数据信息
createMultipartOutput, err := client.CreateMultipartUploadV2(ctx, &tos.CreateMultipartUploadV2Input{
StorageClass: enum.StorageClassStandard,
Meta: map[string]string{"key": "value"},
fmt.Println("CreateMultipartUploadV2 Request ID:", createMultipartOutput.RequestID)
fmt.Println("CreateMultipartUploadV2 Upload ID:", createMultipartOutput.UploadID)
localFile := "/root/example.txt"
fd, err := os.Open(localFile)
stat, err := os.Stat(localFile)
partSize := int64(20 * 1024 * 1024)
var parts []tos.UploadedPartV2
if fileSize-offset < partSize {
uploadSize = fileSize - offset
fd.Seek(offset, io.SeekStart)
partOutput, err := client.UploadPartV2(ctx, &tos.UploadPartV2Input{
UploadPartBasicInput: tos.UploadPartBasicInput{
UploadID: createMultipartOutput.UploadID,
Content: io.LimitReader(fd, uploadSize),
ContentLength: uploadSize,
fmt.Println("upload Request ID:", partOutput.RequestID)
parts = append(parts, tos.UploadedPartV2{PartNumber: partNumber, ETag: partOutput.ETag})
completeOutput, err := client.CompleteMultipartUploadV2(ctx, &tos.CompleteMultipartUploadV2Input{
UploadID: createMultipartOutput.UploadID,
fmt.Println("CompleteMultipartUploadV2 Request ID:", completeOutput.RequestID)