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

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

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

建立存儲空間

存儲空間是OSS全局命名空間,至關於數據的容器,能夠存儲若干文件。 如下代碼用於新建一個存儲空間:github

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)
    }
}複製代碼

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

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

上傳文件

如下代碼用於上傳文件至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個文件。spa

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
        }
    }
}複製代碼

刪除文件

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

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)
    }
}複製代碼

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

參考

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

做者簡介

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

做者簡潔

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

相關文章
相關標籤/搜索