本文介绍如何创建软链接并获取软链接指向的文件内容。

创建软链接

软链接是一种特殊的文件,它指向某个具体的文件,类似于Windows上使用的快捷方式。软链接支持自定义元信息。

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

package main

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

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    bucketName := "<yourBucketName>"
    // 软链接。
    objectName := "<yourSymlinkName>"
    // 软链接目标文件。
    targetObjectName := "<yourSymlinkTargetName>"

    // 获取存储空间。
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建软链接。
    err = bucket.PutSymlink(objectName, targetObjectName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 上传文件到软链接目标文件。
    err = bucket.PutObject(targetObjectName, strings.NewReader("target"))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

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

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

创建软链接的详细信息请参见PutSymlink

获取软链接指向的文件内容

获取软链接要求您对该软链接有读权限。以下代码用于获取软链接指向的文件内容:

package main

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

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    bucketName := "<yourBucketName>"
    // 软链接名称。
    objectName := "<yourSymlinkObjectName>"

    // 获取存储空间。
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

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

获取软链接的详细信息请参见GetSymlink