本文为您提供使用OSS Go SDK进行常见存储操作的快速入门。您将学习如何安装SDK、配置访问凭证,以及执行基本操作,包括创建存储空间(Bucket)、上传、下载、列举和删除文件(Object)等。
前提条件
配置凭证
使用RAM用户AccessKey配置环境变量。
在命令行界面执行以下命令来将环境变量设置追加到
~/.bashrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
执行以下命令使变更生效。
source ~/.bashrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
在终端中执行以下命令,查看默认Shell类型。
echo $SHELL
根据默认Shell类型进行操作。
ZshBash执行以下命令来将环境变量设置追加到
~/.zshrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
执行以下命令使变更生效。
source ~/.zshrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
执行以下命令来将环境变量设置追加到
~/.bash_profile
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
执行以下命令使变更生效。
source ~/.bash_profile
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
在CMD中运行以下命令。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
运行以下命令,检查环境变量是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
在PowerShell中运行以下命令。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
运行以下命令,检查环境变量是否生效。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
安装OSS Go SDK
已安装Go 1.13及以上版本。
通过以下命令查看Go版本。
go version
如果当前没有合适的Go编译运行环境,请参考Golang安装下载和安装。
创建项目目录并初始化Go模块。
mkdir oss-go-example && cd oss-go-example && go mod init oss-go-example
执行以下命令获取远程代码包。
go get github.com/aliyun/aliyun-oss-go-sdk/oss
快速使用
以下是一个简单的示例程序,演示如何创建OSS Client,创建存储空间(Bucket)、上传、下载、列举和删除文件(Object)等。
在您的测试工程目录下创建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 }
修改main.go文件里的bucketName、endpoint、objectName、localFileName、downloadedFileName。
执行以下命令。
go run main.go
相关文档
关于OSS Go SDK V1的更多信息,请参见官方文档。
更多功能的代码示例,请参见sample。
- 本页导读 (1)
- 前提条件
- 配置凭证
- 安装OSS Go SDK
- 快速使用
- 相关文档