本文為您提供使用OSS Go SDK進行常見儲存操作的快速入門。您將學習如何安裝SDK、配置訪問憑證,以及執行基本操作,包括建立儲存空間(Bucket)、上傳、下載、列舉和刪除檔案(Object)等。
安裝Go編譯運行環境
請參考Golang安裝下載和安裝Go編譯運行環境,可以通過以下命令檢查Go是否安裝成功:
go version
安裝OSS Go SDK
執行以下命令擷取遠程程式碼封裝。
go get github.com/aliyun/aliyun-oss-go-sdk/oss
配置訪問憑證
在開始使用SDK之前,您需要配置訪問憑證。本文以RAM使用者的AK為例,更多配置訪問憑證方式,請參見配置訪問憑證。如何擷取RAM使用者的AK,請參見CreateAccessKey - 建立主帳號或RAM使用者存取金鑰。
使用RAM使用者的AK配置訪問憑證的命令如下:
Mac OS X/Linux/Unix
export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
Windows
set OSS_ACCESS_KEY_ID <ALIBABA_CLOUD_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
快速使用
以下是一個簡單的樣本程式,示範如何建立OSS Client,建立儲存空間(Bucket)、上傳、下載、列舉和刪除檔案(Object)等。
在您的測試工程目錄下建立main.go檔案。
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) var client *oss.Client // 全域變數用來儲存OSS用戶端執行個體 func main() { // yourBucketName填寫儲存空間名稱。 bucketName := "yourBucketName" // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 endpoint := "yourEndpoint" // 檢查環境變數是否已經設定。 if endpoint == "" || bucketName == "" { log.Fatal("Please set yourEndpoint and bucketName.") } // 從環境變數中擷取訪問憑證。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { handleError(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(endpoint, "", "", clientOptions...) if err != nil { handleError(err) } // 輸出用戶端資訊。 log.Printf("Client: %#v\n", client) // 樣本操作:建立儲存空間。 if err := createBucket(bucketName); err != nil { handleError(err) } // 樣本操作:上傳檔案。 objectName := "file.txt" localFileName := "/path/to/local/file.txt" if err := uploadFile(bucketName, objectName, localFileName); err != nil { handleError(err) } // 樣本操作:下載檔案。 downloadedFileName := "/path/to/downloaded/file.txt" if err := downloadFile(bucketName, objectName, downloadedFileName); err != nil { handleError(err) } // 樣本操作:列舉對象。 if err := listObjects(bucketName); err != nil { handleError(err) } // 樣本操作:刪除對象。 if err := deleteObject(bucketName, objectName); err != nil { handleError(err) } } // handleError 用於處理不可恢複的錯誤,並記錄錯誤資訊後終止程式。 func handleError(err error) { log.Fatalf("Error: %v", err) } // createBucket 用於建立一個新的OSS儲存空間。 // 參數: // // bucketName - 儲存空間名稱。 // endpoint - Bucket對應的Endpoint。 // // 如果成功,記錄成功日誌;否則,返回錯誤。 func createBucket(bucketName string) error { // 建立儲存空間。 err := client.CreateBucket(bucketName) if err != nil { return err } // 儲存空間建立成功後,記錄日誌。 log.Printf("Bucket created successfully: %s", bucketName) return nil } // uploadFile 用於將本地檔案上傳到OSS儲存桶。 // 參數: // // bucketName - 儲存空間名稱。 // objectName - Object完整路徑,完整路徑中不包含Bucket名稱。 // localFileName - 本地檔案的完整路徑。 // endpoint - Bucket對應的Endpoint。 // // 如果成功,記錄成功日誌;否則,返回錯誤。 func uploadFile(bucketName, objectName, localFileName string) error { // 擷取儲存空間。 bucket, err := client.Bucket(bucketName) if err != nil { return err } // 上傳檔案。 err = bucket.PutObjectFromFile(objectName, localFileName) if err != nil { return err } // 檔案上傳成功後,記錄日誌。 log.Printf("File uploaded successfully to %s/%s", bucketName, objectName) return nil } // downloadFile 用於從OSS儲存桶下載一個檔案到本地路徑。 // 參數: // // bucketName - 儲存空間名稱。 // objectName - Object完整路徑,完整路徑中不能包含Bucket名稱。 // downloadedFileName - 本地檔案的完整路徑。 // endpoint - Bucket對應的Endpoint。 // // 如果成功,記錄成功日誌;否則,返回錯誤。 func downloadFile(bucketName, objectName, downloadedFileName string) error { // 擷取儲存空間。 bucket, err := client.Bucket(bucketName) if err != nil { return err } // 下載檔案。 err = bucket.GetObjectToFile(objectName, downloadedFileName) if err != nil { return err } // 檔案下載成功後,記錄日誌。 log.Printf("File downloaded successfully to %s", downloadedFileName) return nil } // listObjects 用於列舉OSS儲存空間中的所有對象。 // 參數: // // bucketName - 儲存空間名稱。 // endpoint - Bucket對應的Endpoint。 // // 如果成功,列印所有對象;否則,返回錯誤。 func listObjects(bucketName string) error { // 擷取儲存空間。 bucket, err := client.Bucket(bucketName) if err != nil { return err } // 列舉檔案。 marker := "" for { lsRes, err := bucket.ListObjects(oss.Marker(marker)) if err != nil { return err } // 列印列舉檔案,預設情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object: %s", object.Key) } if !lsRes.IsTruncated { break } marker = lsRes.NextMarker } return nil } // deleteObject 用於刪除OSS儲存空間中的一個對象。 // 參數: // // bucketName - 儲存空間名稱。 // objectName - 要刪除的對象名稱。 // endpoint - Bucket對應的Endpoint。 // // 如果成功,記錄成功日誌;否則,返回錯誤。 func deleteObject(bucketName, objectName string) error { // 擷取儲存空間。 bucket, err := client.Bucket(bucketName) if err != nil { return err } // 刪除檔案。 err = bucket.DeleteObject(objectName) if err != nil { return err } // 檔案刪除成功後,記錄日誌。 log.Printf("Object deleted successfully: %s/%s", bucketName, objectName) return nil }
修改main.go檔案裡的bucketName、endpoint、objectName、localFileName、downloadedFileName。
執行以下命令執行。
go run main.go
相關文檔
更多功能的程式碼範例,請參見sample