You need to enable JavaScript to run this app.
Torch Object Storage

Torch Object Storage

Copy page
Download PDF
Manage Objects
Object Metadata Management (Go SDK)
Copy page
Download PDF
Object Metadata Management (Go SDK)
Object metadata refers to the attribute descriptions of an object, comprising both HTTP standard attributes (HTTP Header) and user-defined metadata (User Meta).​
Precautions​
  • Only the object owner has permission to set object metadata.​
  • When configuring user-defined metadata, the metadata Key using English letters supports only lowercase characters and does not allow spaces or other special characters.​
Parameter Description​
Using the TOS Go SDK, you can add and modify metadata for objects that have already been uploaded. TOS supports carrying the following seven request headers to modify object metadata. When downloading an object or performing a HEAD request, these values are set in the HTTP header and returned to the client. The request header is as follows:​
​
Name​
Description​
Content-Type​
Object Type​
Cache-Control​
Specify the web page caching behavior when this object is downloaded.​
Expires​
Cache expiration time as defined in RFC2616​
Content-Disposition​
Name assigned to the object upon download​
Content-Encoding​
Content encoding type when the object is downloaded​
Content-Language​
Content language format of the object upon download​
x-tos-meta-*​
The metadata information set when using the SDK to set the Meta field. When this object is queried, the metadata will be included in the Header of the response message.​
​
Sample Code​
Setting Metadata Information During Standard Upload​
​
package main​
​
import (​
"context"​
"fmt"​
"strings"​
"time"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
func checkErr(err error) {​
if err != nil {​
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())​
} else {​
fmt.Println("Error:", err)​
}​
panic(err)​
}​
}​
​
func main() {​
var (​
accessKey = os.Getenv("TOS_ACCESS_KEY")​
secretKey = os.Getenv("TOS_SECRET_KEY")​
​
endpoint = "https://tos-cn-beijing.volces.com"​
region = "cn-beijing"​
​
bucketName = "*** Provide your bucket name ***"​
​
​
objectKey = "example_dir/example.txt"​
ctx = context.Background()​
)​
​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
​
body := strings.NewReader("Hello TOS")​
output, err := client.PutObjectV2(ctx, &tos.PutObjectV2Input{​
PutObjectBasicInput: tos.PutObjectBasicInput{​
Bucket: bucketName,​
Key: objectKey,​
​
Meta: map[string]string{"key": "value"},​
​
ContentType: "text/html",​
​
ContentLanguage: "zh-cn",​
​
CacheControl: "no-store",​
​
Expires: time.Now().UTC().Add(time.Hour),​
​
ContentDisposition: "example.png",​
​
ContentEncoding: "deflate",​
},​
Content: body,​
})​
checkErr(err)​
fmt.Println("PutObjectV2 Request ID:", output.RequestID)​
}​
​
Configuring Metadata Information for Multipart Uploads​
​
package main​
​
import (​
"context"​
"fmt"​
"strings"​
"time"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
func checkErr(err error) {​
if err != nil {​
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())​
} else {​
fmt.Println("Error:", err)​
}​
panic(err)​
}​
}​
​
func main() {​
var (​
accessKey = os.Getenv("TOS_ACCESS_KEY")​
secretKey = os.Getenv("TOS_SECRET_KEY")​
​
endpoint = "https://tos-cn-beijing.volces.com"​
region = "cn-beijing"​
​
bucketName = "*** Provide your bucket name ***"​
​
​
objectKey = "example_dir/example.txt"​
ctx = context.Background()​
)​
​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
​
output, err := client.CreateMultipartUploadV2(ctx, &tos.CreateMultipartUploadV2Input{​
​
Bucket: bucketName,​
Key: objectKey,​
​
Meta: map[string]string{"key": "value"},​
​
ContentType: "text/html",​
​
ContentLanguage: "zh-cn",​
​
CacheControl: "no-store",​
​
Expires: time.Now().UTC().Add(time.Hour),​
​
ContentDisposition: "example.png",​
​
ContentEncoding: "deflate",​
})​
checkErr(err)​
fmt.Println("CreateMultipartUploadV2 Request ID:", output.RequestID)​
fmt.Println("CreateMultipartUploadV2 Upload ID:", output.UploadID)​
​
​
part, err := client.UploadPartV2(ctx, &tos.UploadPartV2Input{​
UploadPartBasicInput: tos.UploadPartBasicInput{​
Bucket: bucketName,​
Key: objectKey,​
UploadID: output.UploadID,​
PartNumber: 1,​
},​
Content: strings.NewReader("your body data"),​
})​
checkErr(err)​
fmt.Println("UploadPartV2 Request ID:", part.RequestID)​
​
​
completeMultipartOutput, err := client.CompleteMultipartUploadV2(ctx, &tos.CompleteMultipartUploadV2Input{​
Bucket: bucketName,​
Key: objectKey,​
UploadID: output.UploadID,​
Parts: []tos.UploadedPartV2{{​
PartNumber: part.PartNumber,​
ETag: part.ETag,​
}},​
})​
checkErr(err)​
fmt.Println("CompleteMultipartUploadV2 Request ID:", completeMultipartOutput.RequestID)​
}​
​
Set object metadata information using SetObjectMeta.​
​
package main​
​
import (​
"context"​
"fmt"​
"time"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
func checkErr(err error) {​
if err != nil {​
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())​
} else {​
fmt.Println("Error:", err)​
}​
panic(err)​
}​
}​
​
func main() {​
var (​
accessKey = os.Getenv("TOS_ACCESS_KEY")​
secretKey = os.Getenv("TOS_SECRET_KEY")​
​
endpoint = "https://tos-cn-beijing.volces.com"​
region = "cn-beijing"​
​
bucketName = "*** Provide your bucket name ***"​
​
​
objectKey = "example_dir/example.txt"​
ctx = context.Background()​
)​
​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
​
​
output, err := client.SetObjectMeta(ctx, &tos.SetObjectMetaInput{​
Bucket: bucketName,​
Key: objectKey,​
​
Meta: map[string]string{"key": "value"},​
​
ContentType: "text/html",​
​
ContentLanguage: "zh-cn",​
​
CacheControl: "no-store",​
​
Expires: time.Now().UTC().Add(time.Hour),​
​
ContentDisposition: "example.png",​
​
ContentEncoding: "deflate",​
})​
checkErr(err)​
fmt.Println("SetObjectMeta Request ID:", output.RequestID)​
}​
​
Query Object Metadata Information (Determine Whether the Object Exists)​
warning​
Before obtaining object metadata, you must have the tos:GetObject permission. For detailed instructions, refer to the IAM Policy Overview.​
​
package main​
​
import (​
"context"​
"fmt"​
"net/http"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
func checkErr(err error) {​
if err != nil {​
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())​
} else {​
fmt.Println("Error:", err)​
}​
panic(err)​
}​
}​
​
func main() {​
var (​
accessKey = os.Getenv("TOS_ACCESS_KEY")​
secretKey = os.Getenv("TOS_SECRET_KEY")​
​
endpoint = "https://tos-cn-beijing.volces.com"​
region = "cn-beijing"​
​
bucketName = "*** Provide your bucket name ***"​
​
​
objectKey = "example_dir/example.txt"​
ctx = context.Background()​
)​
​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
output, err := client.HeadObjectV2(ctx, &tos.HeadObjectV2Input{​
Bucket: bucketName,​
Key: objectKey,​
})​
if err != nil {​
if serverErr, ok := err.(*tos.TosServerError); ok {​
​
if serverErr.StatusCode == http.StatusNotFound {​
fmt.Println("Object not found.")​
} else {​
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)​
panic(err)​
}​
} else {​
panic(err)​
}​
}​
fmt.Println("HeadObjectV2 Request ID:", output.RequestID)​
​
fmt.Println("HeadObjectV2 Response ContentLanguage:", output.ContentLanguage)​
​
fmt.Println("HeadObjectV2 Response ContentDisposition:", output.ContentDisposition)​
​
fmt.Println("HeadObjectV2 Response ContentEncoding:", output.ContentEncoding)​
​
fmt.Println("HeadObjectV2 Response CacheControl:", output.CacheControl)​
​
fmt.Println("HeadObjectV2 Response ContentType:", output.ContentType)​
​
fmt.Println("HeadObjectV2 Response Expires:", output.Expires)​
}​
​
Relevant Documents​
For API documentation on setting object metadata, refer to SetObjectMeta.​
Last updated: 2025.09.19 17:30:21