Go 怎么操作 OSS 阿里云对象存储?

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Go 怎么操作 OSS 阿里云对象存储?

介绍

在项目开发中,我们经常会使用对象存储,比如 Amazon 的 S3,腾讯云的 COS,阿里云的 OSS 等。本文我们以阿里云 OSS 为例,介绍怎么使用 Go 操作对象存储。

阿里云 OSS 提供了 REST Api 和 OSS Go SDK,本文我们介绍使用 SDK 操作 OSS,限于篇幅,我们只介绍上传和下载。

上传

SDK 支持多种上传功能,比如简单上传、追加上传、断点续传上传、分片上传等,我们以简单上传为例,介绍怎么使用 SDK 上传文件,简单上传功能分为流式上传和文件上传两种方式。

所谓流式上传,即使用文件流、网络流等作为 OSS 文件的数据源。

所谓文件上传,即使用本地文件作为 OSS 文件的数据源。

在项目开发中,流式上传(文件流和网络流)相对文件上传,使用的场景比较少。限于篇幅,我们只介绍文件上传这种方式。

在使用 SDK 之前,我们需要先使用 go get 获取包(也可以使用 go mod 方式),然后在代码中导入。

go get github.com/aliyun/aliyun-oss-go-sdk/oss

OSS 存储文件,实际上是将文件存储到 Bucket (存储空间)中,SDK 提供了一些操作 Bucket 的方法。

在获取 Bucket 实例之前,我们需要先获取 Client 实例。

func GetOssClient(endpoint, ak, sk string) (client *oss.Client, err error) {
 client, err = oss.New(endpoint, ak, sk)
 return
}

阅读上面这段代码,我们通过 SDK 的 New 函数,创建了一个 client 实例,需要注意的是,我们需要将 OSS 的 endpointaksk 作为参数传入 New 函数,更多关于 client 的配置选项,请查阅 OSS Go SDK 文档。

我们在获取到 client 之后,可以使用 client 获取 bucket

func GetBucket(client *oss.Client, bucketName string) (bucket *oss.Bucket, err error) {
 bucket, err = client.Bucket(bucketName)
 return
}

阅读上面这段代码,我们通过 client 提供的 Bucket 方法,将我们创建的 bucket 的名字作为参数传入该方法中,创建了一个 bucket 实例,然后我们就可以去使用 bucket 实例提供的方法。

我们也可以使用 client 实例提供的方法,创建和删除 Bucket,但在实际项目开发中,一般都是让运维同事帮忙创建和删除,很少在代码中操作。

接下来,我们介绍几个 bucket 实例提供的方法。

场景一:上传本地文件

在项目开发中,经常会遇到需要用户上传本地文件的场景,比如设置头像、上传身份证照片等。

我们以设置头像为例,介绍如何将本地照片上传到 OSS。

示例代码:

err = bucket.PutObjectFromFile("a.jpg", "/Users/frank/Downloads/1.jpg")
if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

阅读上面这段代码,我们使用 bucket 实例的 PutObjectFromFile 方法,将本地的图片上传到 OSS 中,该方法还可以传入第三个参数(可选参数),用于指定上传文件的属性。

场景二:上传字符串

在项目开发中,经常会遇到需要用户上传字符串的场景,比如使用 OSS 存储文本内容。

我们以上传博客为例,介绍如何将字符串上传到 OSS。

示例代码:

blogConetnt := "This is my first blog"
err = bucket.PutObject("my-first-blog.txt", strings.NewReader(blogConetnt))
if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

阅读上面这段代码,我们使用 bucket 实例的 PutObject 方法,将字符串上传到 OSS 中,该方法还可以传入第三个参数(可选参数),用于指定上传文件的属性。

场景三:上传字节切片

在项目开发中,经常会遇到将字节切片格式的数据上传到 OSS 中,比如将 json.Marshal() 的字节切片上传到 OSS 中。

示例代码:

user := struct {
    UserId   int64  `json:"user_id"`
    UserName string `json:"user_name"`
    Email    string `json:"email"`
}{
    UserId:   10001,
    UserName: "frank",
    Email:    "gopher@88.com",
}
userData, _ := json.Marshal(user)
err = bucket.PutObject("user.txt", bytes.NewReader(userData))
if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

阅读上面这段代码,我们使用 bucket 实例的 PutObject 方法,将 json.Marshal() 的字节切片上传到 OSS 中。

我们也可以使用 bucket 实例的 PutObject 方法上传本地文件,但是一般都是使用 PutObjectFromFile 方法。

03

下载

OSS Go SDK 同样支持多种下载方式,相比文件上传,在实际项目开发中,文件下载的使用场景并不多,一般都是查询(读取)文件。

为了文章的完整,我们介绍了文件上传,也顺带简单介绍一下文件下载。

关于文件下载,SDK 也是支持流式下载和本地文件下载,本文我们以本地文件下载为例,介绍怎么使用 SDK 下载 OSS 中的文件到本地。

示例代码:

err = bucket.GetObjectToFile("a.jpeg", "/Users/frank/Downloads/oss.jpeg")
if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

阅读上面这段代码,我们使用 bucket 实例的 GetObjectToFile 方法,将 OSS 中的文件 a.jpeg 下载到本地。

04

总结

本文我们介绍 Go 怎么操作 OSS 阿里云对象存储,主要介绍了 OSS Go SDK 关于文件上传和文件下载的几个方法,建议感兴趣的读者朋友们阅读 OSS Go SDK 文档[1],自己尝试写文件查询的代码。

更多示例代码,请参阅 OSS Go SDK 示例[2]OSS Go SDK Api 文档[3]


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
191 2
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
3天前
|
网络协议 对象存储
阿里云oss配置自有域名
阿里云oss配置自有域名
12 1
|
5天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
11 0
|
11天前
|
存储 数据可视化 安全
对象存储OSS产品常见问题之有几十亿个txt文件,单个4kb,使用oss如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
43 11
|
11天前
|
存储 弹性计算 文件存储
对象存储OSS产品常见问题之OSS Bucket 创建好后更改存储类型如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
37 0
|
12天前
|
存储 Java API
阿里云oss简介和使用流程
本文档介绍了如何准备阿里云OSS(对象存储服务)并开始使用它。首先,需要注册阿里云账号并进行实名认证,然后购买OSS资源包。在阿里云控制台中,可以创建和管理OSS存储空间(称为“Bucket”)。接着,文章简要介绍了阿里云OSS,它是一个基于云端的对象存储服务,提供高可靠性、高性能、低成本和易于使用的特性。 在阿里云OSS控制台,用户可以进行文件的上传和下载操作。通过API,开发者可以使用各种编程语言(如Java)来创建、删除Bucket以及上传、下载和删除文件。例如,Java代码示例展示了如何创建Bucket、上传文件、删除文件以及下载文件到本地的操作。
|
19天前
|
开发工具 对象存储
阿里云OSS文件上传
阿里云OSS文件上传
61 0
|
19天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
56 0
|
1月前
|
存储 对象存储 容器
阿里云OSS对象存储基础入门
阿里云OSS对象存储基础入门
92 0