警告 在上傳檔案時設定中繼資料,請確保該Bucket內不存在同名檔案,否則會覆蓋同名檔案。關於如何避免覆蓋同名檔案的更多資訊,請參見避免覆蓋同名檔案。
package main
import (
"log"
"strings"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 建立OSSClient執行個體。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 設定簽名版本
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫Bucket名稱,例如examplebucket。
bucketName := "examplebucket" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 設定檔案中繼資料,例如指定到期時間為2049年01月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"),
}
// 使用資料流上傳檔案。
// 填寫Object的完整路徑,完整路徑中不包含Bucket名稱,例如exampledir/exampleobject.txt。
objectName := "exampledir/exampleobject.txt" // 請替換為實際的物件路徑
err = bucket.PutObject(objectName, strings.NewReader("MyObjectValue"), options...)
if err != nil {
log.Fatalf("Failed to upload object: %v", err)
}
// 擷取檔案中繼資料。
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
log.Fatalf("Failed to get object detailed metadata: %v", err)
}
log.Printf("Object Meta: %+v\n", props)
}