全部产品
Search
文档中心

对象存储 OSS:OSS Go SDK快速入门

更新时间:Oct 28, 2024

本文为您提供使用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)等。

  1. 在您的测试工程目录下创建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
    }
    
  2. 修改main.go文件里的bucketName、endpoint、objectName、localFileName、downloadedFileName。

  3. 执行以下命令执行。

    go run main.go

相关文档

  • 更多功能的代码示例,请参见sample