zoukankan      html  css  js  c++  java
  • 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等开发、运维知识等提升硬实力的文章,期待你的关注。转载说明:务必注明来源(注明:来源于公众号:我的小碗汤,作者:小碗汤)

  • 相关阅读:
    widget的进一步使用,利用AppWidgetProvider实现桌面的时钟挂件
    opengl绘图,画一个旋转的四边形和一个旋转的三角形,平滑着色和单一着色
    opengl se画图
    绘制立方体和单个的矩阵,并映射纹理图像
    opengl的坐标和glFrustumf的设定及参数相关意义
    glDrawElements 和glDrawArrays
    spring mvc的拦截器
    spring mvc 文件上传
    spring mvc返回json字符串的方式
    springmvc的数据校验
  • 原文地址:https://www.cnblogs.com/liabio/p/11946281.html
Copyright © 2011-2022 走看看