本文为您提供使用OSS Go SDK进行常见存储操作的快速入门。您将学习如何安装SDK、配置访问凭证,以及执行基本操作,包括创建存储空间(Bucket)、上传、下载、列举和删除文件(Object)等。
安装Go编译运行环境
请参考Golang安装下载和安装Go编译运行环境,可以通过以下命令检查Go是否安装成功:
go version
安装OSS Go SDK
执行以下命令获取远程代码包。
go get github.com/aliyun/aliyun-oss-go-sdk/oss
配置访问凭证
在开始使用SDK之前,您需要配置访问凭证。本文以RAM用户的AK为例,更多配置访问凭证方式,请参见配置访问凭证。如何获取RAM用户的AK,请参见CreateAccessKey - 创建主账号或RAM用户访问密钥。
使用RAM用户的AK配置访问凭证的命令如下:
Mac OS X/Linux/Unix
export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
Windows
set OSS_ACCESS_KEY_ID <ALIBABA_CLOUD_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
快速使用
以下是一个简单的示例程序,演示如何创建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
相关文档
更多功能的代码示例,请参见sample