golang操作阿里雲對象存儲——OSS | 創建桶、上傳、下載、查詢、刪除數據


本節介紹如何快速使用OSS Go SDK完成常見操作,如創建存儲空間(Bucket)、上傳/下載文件(Object)等。

先下載包github.com/aliyun/aliyun-oss-go-sdk/oss到GOPATH下

創建存儲空間

存儲空間是OSS全局命名空間,相當於數據的容器,可以存儲若干文件。 以下代碼用於新建一個存儲空間:

package main
import (
   "fmt"
   "os"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}
func main() {
   // Endpoint以杭州為例,其它Region請按實際情況填寫。
   endpoint := "http://oss-cn-hangzhou.aliyuncs.com"
   // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。
   accessKeyId := "<yourAccessKeyId>"
   accessKeySecret := "<yourAccessKeySecret>"
   bucketName := "<yourBucketName>"
   // 創建OSSClient實例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
       handleError(err)
   }
   // 創建存儲空間。
   err = client.CreateBucket(bucketName)
   if err != nil {
       handleError(err)
   }
}

存儲空間的命名規范,請參見基本概念中的命名規范。創建存儲空間詳情,請參見創建存儲空間。

獲取endpoint信息,請參見訪問域名和數據中心文檔。

上傳文件

以下代碼用於上傳文件至OSS:

package main
import (
   "fmt"
   "os"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}
func main() {
   // Endpoint以杭州為例,其它Region請按實際情況填寫。
   endpoint := "http://oss-cn-hangzhou.aliyuncs.com"
   // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。
   accessKeyId := "<yourAccessKeyId>"
   accessKeySecret := "<yourAccessKeySecret>"
   bucketName := "<yourBucketName>"
   // <yourObjectName>上傳文件到OSS時需要指定包含文件后綴在內的完整路徑,例如abc/efg/123.jpg。
   objectName := "<yourObjectName>"
   // <yourLocalFileName>由本地文件路徑加文件名包括后綴組成,例如/users/local/myfile.txt。
   localFileName := "<yourLocalFileName>"
   // 創建OSSClient實例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
       handleError(err)
   }
   // 獲取存儲空間。
   bucket, err := client.Bucket(bucketName)
   if err != nil {
       handleError(err)
   }
   // 上傳文件。
   err = bucket.PutObjectFromFile(objectName, localFileName)
   if err != nil {
       handleError(err)
   }
}

下載文件

以下代碼用於下載文件到本地:

package main
import (
   "fmt"
   "os"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}
func main() {
   // Endpoint以杭州為例,其它Region請按實際情況填寫。
   endpoint := "http://oss-cn-hangzhou.aliyuncs.com"
   // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。
   accessKeyId := "<yourAccessKeyId>"
   accessKeySecret := "<yourAccessKeySecret>"
   bucketName := "<yourBucketName>"
   // <yourObjectName>從OSS下載文件時需要指定包含文件后綴在內的完整路徑,例如abc/efg/123.jpg。
   objectName := "<yourObjectName>"
   downloadedFileName := "<yourDownloadedFileName>"
   // 創建OSSClient實例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
       handleError(err)
   }
   // 獲取存儲空間。
   bucket, err := client.Bucket(bucketName)
   if err != nil {
       handleError(err)
   }
   // 下載文件。
   err = bucket.GetObjectToFile(objectName, downloadedFileName)
   if err != nil {
       handleError(err)
   }
}

列舉文件

以下代碼用於列舉指定存儲空間下的文件。默認列舉100個文件。

package main
import (
   "fmt"
   "os"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}
func main() {
   // 創建OSSClient實例。
   client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
   if err != nil {
       HandleError(err)
   }
   // 獲取存儲空間。
   bucketName := "<yourBucketName>"
   bucket, err := client.Bucket(bucketName)
   if err != nil {
       HandleError(err)
   }
   // 列舉文件。
   marker := ""
   for {
       lsRes, err := bucket.ListObjects(oss.Marker(marker))
       if err != nil {
           HandleError(err)
       }
       // 打印列舉文件,默認情況下一次返回100條記錄。 
       for _, object := range lsRes.Objects {
           fmt.Println("Bucket: ", object.Key)
       }
       if lsRes.IsTruncated {
           marker = lsRes.NextMarker
       } else {
           break
       }
   }
}

刪除文件

以下代碼用於刪除指定文件:

package main
import (
   "fmt"
   "os"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}
func main() {
   // Endpoint以杭州為例,其它Region請按實際情況填寫。
   endpoint := "http://oss-cn-hangzhou.aliyuncs.com"
   // 阿里雲主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建並使用RAM賬號進行API訪問或日常運維,請登錄 https://ram.console.aliyun.com 創建RAM賬號。
   accessKeyId := "<yourAccessKeyId>"
   accessKeySecret := "<yourAccessKeySecret>"
   bucketName := "<yourBucketName>"
   // <yourObjectName>表示刪除OSS文件時需要指定包含文件后綴在內的完整路徑,例如abc/efg/123.jpg。
   objectName := "<yourObjectName>"
   // 創建OSSClient實例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
       handleError(err)
   }
   // 獲取存儲空間。
   bucket, err := client.Bucket(bucketName)
   if err != nil {
       handleError(err)
   }
   // 刪除文件。
   err = bucket.DeleteObject(objectName)
   if err != nil {
       handleError(err)
   }
}

刪除文件詳情請參見管理文件中的刪除文件。

參考

阿里雲對象存儲OSS對接文檔

作者簡介

作者:小碗湯,一位熱愛、認真寫作的小伙,目前維護原創公眾號:『我的小碗湯』,專注於寫golang、docker、kubernetes等知識等提升硬實力的文章,期待你的關注。轉載說明:務必注明來源(注明:來源於公眾號:我的小碗湯, 作者:小碗湯)

作者簡潔

作者:小碗湯,一位熱愛、認真寫作的小伙,目前維護原創公眾號:『我的小碗湯』,專注於寫go語言、docker、kubernetes、java等開發、運維知識等提升硬實力的文章,期待你的關注。轉載說明:務必注明來源(注明:來源於公眾號:我的小碗湯,作者:小碗湯)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM