文件元信息(Object Meta)详情请参见开发指南中的文件元信息。文件元信息的完整代码请参见GitHub

设置文件元信息

您可以在上传文件时设置文件元信息。可设置的文件元信息如下:

参数 说明
CacheControl 指定该文件被下载时的网页的缓存行为。
ContentDisposition 指定该文件被下载时的名称。
ContentEncoding 指定该文件被下载时的内容编码格式。
Expires 设置缓存过期时间,格式是格林威治时间(GMT)。
ServerSideEncryption 指定OSS创建文件时的服务器端加密编码算法。有效值:AES256。
ObjectACL 指定OSS创建的文件的访问权限。
Meta 自定义元信息,以X-Oss-Meta-为前缀的参数。

以下代码用于设置文件元信息:

package main

import (
	"fmt"
	"os"
	"time"
	"strings"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 创建OSSClient实例。
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 获取存储空间。
	bucket, err := client.Bucket("<yourBucketName>")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 设置文件元信息:过期时间为2049年1月10日 23:00:00 GMT,访问权限为公共读,自定义元信息为MyProp(取值MyPropVal)
	expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
	options := []oss.Option{
		oss.Expires(expires),
		oss.ObjectACL(oss.ACLPublicRead),
		oss.Meta("MyProp", "MyPropVal"),
	}

	// 使用数据流上传文件。
	err = bucket.PutObject("<yourObjectName>", strings.NewReader("MyObjectValue"), options...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 获取文件元信息。
	props, err := bucket.GetObjectDetailedMeta("<yourObjectName>")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Object Meta:", props)
}

修改文件元信息

您可以一次修改一条或多条元信息,代码如下:

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 创建OSSClient实例。
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	bucketName := "<yourBucketName>"
	objectName := "<yourObjectName>"

	// 获取存储空间。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 一次修改一条元信息。
	err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 一次修改多条元信息。
	options := []oss.Option{
		oss.Meta("MyMeta", "MyMetaValue2"),
		oss.Meta("MyObjectLocation", "HangZhou"),
	}
	err = bucket.SetObjectMeta(objectName, options...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 获取文件元信息。
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Object Meta:", props)
}

获取文件元信息

以下代码用于获取文件元信息:

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 创建OSSClient实例。
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	bucketName := "<yourBucketName>"
	objectName := "<yourObjectName>"

	// 获取存储空间。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 获取文件元信息。
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Object Meta:", props)
}