OSS Go SDK快速入门

更新时间:2024-12-26 12:53:34

本文为您提供使用OSS Go SDK进行常见存储操作的快速入门。您将学习如何安装SDK、配置访问凭证,以及执行基本操作,包括创建存储空间(Bucket)、上传、下载、列举和删除文件(Object)等。

前提条件

配置凭证

使用RAM用户AccessKey配置环境变量。

Linux
macOS
Windows
  1. 在命令行界面执行以下命令来将环境变量设置追加到~/.bashrc 文件中。

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. 执行以下命令使变更生效。

    source ~/.bashrc
  3. 执行以下命令检查环境变量是否生效。

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET
  1. 在终端中执行以下命令,查看默认Shell类型。

    echo $SHELL
  2. 根据默认Shell类型进行操作。

    Zsh
    Bash
    1. 执行以下命令来将环境变量设置追加到 ~/.zshrc 文件中。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
    2. 执行以下命令使变更生效。

      source ~/.zshrc
    3. 执行以下命令检查环境变量是否生效。

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET
    1. 执行以下命令来将环境变量设置追加到 ~/.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
    2. 执行以下命令使变更生效。

      source ~/.bash_profile
    3. 执行以下命令检查环境变量是否生效。

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET
CMD
PowerShell
  1. CMD中运行以下命令。

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
  2. 运行以下命令,检查环境变量是否生效。

    echo %OSS_ACCESS_KEY_ID%
    echo %OSS_ACCESS_KEY_SECRET%
  1. 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)
  2. 运行以下命令,检查环境变量是否生效。

    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

安装OSS Go SDK

  1. 已安装Go 1.13及以上版本。

    通过以下命令查看Go版本。

    go version

    如果当前没有合适的Go编译运行环境,请参考Golang安装下载和安装。

  2. 创建项目目录并初始化Go模块。

    mkdir oss-go-example && cd oss-go-example && go mod init oss-go-example
  3. 执行以下命令获取远程代码包。

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

快速使用

以下是一个简单的示例程序,演示如何创建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

相关文档

  • 关于OSS Go SDK V1的更多信息,请参见官方文档

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

  • 本页导读 (1)
  • 前提条件
  • 配置凭证
  • 安装OSS Go SDK
  • 快速使用
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等