Go管理軟鏈接
軟鏈接功能用于便捷訪問存儲(chǔ)空間內(nèi)的常用文件。設(shè)置軟鏈接后,您可以使用類似于Windows的快捷方式,通過軟鏈接打開文件。本文介紹如何使用OSS Go SDK創(chuàng)建軟鏈接和獲取軟鏈接。
注意事項(xiàng)
本文示例代碼以華東1(杭州)的地域ID
cn-hangzhou
為例,默認(rèn)使用外網(wǎng)Endpoint,如果您希望通過與OSS同地域的其他阿里云產(chǎn)品訪問OSS,請(qǐng)使用內(nèi)網(wǎng)Endpoint。關(guān)于OSS支持的Region與Endpoint的對(duì)應(yīng)關(guān)系,請(qǐng)參見OSS地域和訪問域名。本文以從環(huán)境變量讀取訪問憑證為例。如何配置訪問憑證,請(qǐng)參見配置訪問憑證。
要?jiǎng)?chuàng)建軟鏈接,您必須具有
oss:PutObject
權(quán)限;要獲取軟鏈接,您必須具有oss:GetObject
權(quán)限。具體操作,請(qǐng)參見為RAM用戶授權(quán)自定義的權(quán)限策略。
方法定義
創(chuàng)建軟鏈接
func (c *Client) PutSymlink(ctx context.Context, request *PutSymlinkRequest, optFns ...func(*Options)) (*PutSymlinkResult, error)
獲取軟鏈接
func (c *Client) GetSymlink(ctx context.Context, request *GetSymlinkRequest, optFns ...func(*Options)) (*GetSymlinkResult, error)
請(qǐng)求參數(shù)列表
參數(shù)名 | 類型 | 說明 |
ctx | context.Context | 請(qǐng)求的上下文,可以用來設(shè)置請(qǐng)求的總時(shí)限 |
request | *PutSymlinkRequest | 創(chuàng)建軟鏈接接口的請(qǐng)求參數(shù),具體請(qǐng)參見PutSymlinkRequest |
*GetSymlinkRequest | 獲取軟鏈接接口的請(qǐng)求參數(shù),具體請(qǐng)參見GetSymlinkRequest | |
optFns | ...func(*Options) | (可選)接口級(jí)的配置參數(shù), 具體請(qǐng)參見Options |
返回值列表
返回值名 | 類型 | 說明 |
result | *PutSymlinkResult | 創(chuàng)建軟鏈接接口的返回值,當(dāng) err 為nil 時(shí)有效,具體請(qǐng)參見RestoreObjectResult |
*GetSymlinkResult | 獲取軟鏈接接口的返回值,當(dāng)err為nil時(shí)有效,具體請(qǐng)參見GetSymlinkResult | |
err | error | 請(qǐng)求的狀態(tài),當(dāng)請(qǐng)求失敗時(shí),err 不為 nil |
示例代碼
創(chuàng)建軟鏈接
您可以使用以下代碼創(chuàng)建軟鏈接。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定義全局變量
var (
region string // 存儲(chǔ)區(qū)域
bucketName string // 存儲(chǔ)空間名稱
objectName string // 對(duì)象名稱
)
// init函數(shù)用于初始化命令行參數(shù)
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
// 解析命令行參數(shù)
flag.Parse()
// 定義軟鏈接名稱
var (
symlinkName = "testsymlink" // 軟鏈接名稱
)
// 檢查region是否為空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 檢查bucket名稱是否為空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 檢查object名稱是否為空
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 檢查軟鏈接名稱是否為空
if len(symlinkName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, symlink name required")
}
// 加載默認(rèn)配置并設(shè)置憑證提供者和區(qū)域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 創(chuàng)建OSS客戶端
client := oss.NewClient(cfg)
// 創(chuàng)建設(shè)置軟鏈接的請(qǐng)求
putRequest := &oss.PutSymlinkRequest{
Bucket: oss.Ptr(bucketName), // 存儲(chǔ)空間名稱
Key: oss.Ptr(symlinkName), // 填寫軟鏈接名稱
Target: oss.Ptr(objectName), // 填寫軟鏈接的目標(biāo)文件名稱
}
// 執(zhí)行設(shè)置軟鏈接的請(qǐng)求
putResult, err := client.PutSymlink(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put symlink %v", err)
}
// 打印設(shè)置軟鏈接的結(jié)果
log.Printf("put symlink result:%#v\n", putResult)
}
獲取軟鏈接
您可以使用以下代碼獲取軟鏈接以及軟鏈接指向的目標(biāo)文件名稱。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定義全局變量
var (
region string // 存儲(chǔ)區(qū)域
bucketName string // 存儲(chǔ)空間名稱
symlinkName string // 軟鏈接名稱
)
// init函數(shù)用于初始化命令行參數(shù)
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&symlinkName, "symlink", "", "The name of the symlink.")
}
func main() {
// 解析命令行參數(shù)
flag.Parse()
// 檢查region是否為空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 檢查bucket名稱是否為空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 檢查symlink名稱是否為空
if len(symlinkName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, symlink name required")
}
// 加載默認(rèn)配置并設(shè)置憑證提供者和區(qū)域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 創(chuàng)建OSS客戶端
client := oss.NewClient(cfg)
// 創(chuàng)建獲取軟鏈接的請(qǐng)求
getRequest := &oss.GetSymlinkRequest{
Bucket: oss.Ptr(bucketName), // 存儲(chǔ)空間名稱
Key: oss.Ptr(symlinkName), // 軟鏈接名稱
}
// 執(zhí)行獲取軟鏈接的操作并處理結(jié)果
getResult, err := client.GetSymlink(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get symlink %v", err)
}
// 打印軟鏈接的目標(biāo)文件名稱
log.Printf("get symlink target object name:%#v\n", *getResult.Target)
}
相關(guān)文檔
關(guān)于軟鏈接的完整示例代碼,請(qǐng)參見GitHub示例put_symlink.go和get_symlink.go。
關(guān)于軟鏈接的更多操作信息,請(qǐng)參見軟鏈接。
關(guān)于創(chuàng)建軟鏈接的API接口,請(qǐng)參見PutSymlink。
關(guān)于獲取軟鏈接的API接口,請(qǐng)參見GetSymlink。