全部产品
Search
文档中心

对象存储 OSS:Go管理软链接

更新时间:Dec 20, 2023

软链接功能用于便捷访问Bucket内的常用Object。设置软链接后,您可以使用类似于Windows的快捷方式,通过软链接文件打开Object。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化

  • 要创建软链接,您必须具有oss:PutObject权限;要获取软链接,您必须具有oss:GetObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

创建软链接

以下代码用于创建软链接:

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    // 指定软链接名称,例如examplesymlink。
    symObjectKey := "examplesymlink.txt"
    // 指定软链接指向的目标Object名称,例如exampleobject.txt。
    objectName := "exampleobject.txt"

    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建软链接。
    option := [] oss.Option{
        // 指定创建软链接时是否覆盖同名Object。true表示覆盖,false表示不覆盖。
        oss.ForbidOverWrite(true),
        // 指定Object的访问权限。此处指定为Private,表示私有访问权限。
        oss.ObjectACL(oss.ACLPrivate),
        // 指定Object的存储类型。此处指定为Standard,表示标准存储类型。
        oss.StorageClass(oss.StorageStandard),

    }
    err = bucket.PutSymlink(symObjectKey,objectName ,option...)

    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

}

获取软链接指向的目标文件名称

获取软链接要求您对该软链接有读权限。以下代码用于获取软链接以及软链接指向的目标文件名称:

package main

import (
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    // 填写软链接名称。
    symlinkName := "examplesymlink.txt"
   
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 获取软链接指向的目标文件名称。
    meta, err := bucket.GetSymlink(symlinkName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println(meta.Get(oss.HTTPHeaderOssSymlinkTarget))
}            

相关文档

  • 关于创建软链接的API接口说明,请参见PutSymlink

  • 关于获取软链接的API接口说明,请参见GetSymlink