全部產品
Search
文件中心

Object Storage Service:OSS Go SDK快速入門

更新時間:Oct 29, 2024

本文為您提供使用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)等。

  1. 在您的測試工程目錄下建立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
    }
    
  2. 修改main.go檔案裡的bucketName、endpoint、objectName、localFileName、downloadedFileName。

  3. 執行以下命令執行。

    go run main.go

相關文檔

  • 更多功能的程式碼範例,請參見sample