# `LibOss.Core.Symlink`
[🔗](https://github.com/tt67wq/lib-oss/blob/main/lib/lib_oss/core/symlink.ex#L1)

符号链接模块

负责：
- put_symlink: 创建符号链接
- get_symlink: 获取符号链接目标

# `err_t`

```elixir
@type err_t() :: {:error, LibOss.Exception.t()}
```

# `get_symlink`

```elixir
@spec get_symlink(module(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, binary()} | err_t()
```

获取符号链接目标

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 符号链接对象名称

## 返回值
- `{:ok, binary()} | {:error, Exception.t()}`

返回符号链接指向的目标对象名称

## 示例
    iex> LibOss.Core.Symlink.get_symlink(MyOss, "my-bucket", "link-object")
    {:ok, "target-object"}

## 相关文档
https://help.aliyun.com/document_detail/45146.html

# `get_symlink_meta`

```elixir
@spec get_symlink_meta(module(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, map()} | err_t()
```

获取符号链接的元数据（包括目标对象）

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 符号链接对象名称

## 返回值
- `{:ok, map()} | {:error, Exception.t()}`

返回的map包含：
- target: 目标对象名称
- headers: 其他响应头信息

## 示例
    iex> LibOss.Core.Symlink.get_symlink_meta(MyOss, "my-bucket", "link-object")
    {:ok, %{
      target: "target-object",
      headers: %{"content-type" => "application/octet-stream", ...}
    }}

# `put_symlink`

```elixir
@spec put_symlink(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  binary(),
  LibOss.Typespecs.headers()
) :: :ok | err_t()
```

创建符号链接

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 符号链接对象名称
- target_object: 目标对象名称
- headers: 可选的HTTP请求头

## 返回值
- :ok | {:error, Exception.t()}

## 示例
    iex> LibOss.Core.Symlink.put_symlink(MyOss, "my-bucket", "link-object", "target-object")
    :ok

## 相关文档
https://help.aliyun.com/document_detail/45126.html

# `put_symlink_with_metadata`

```elixir
@spec put_symlink_with_metadata(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  binary(),
  map()
) :: :ok | err_t()
```

创建符号链接并设置自定义元数据

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 符号链接对象名称
- target_object: 目标对象名称
- metadata: 自定义元数据map

## 返回值
- :ok | {:error, Exception.t()}

## 示例
    iex> LibOss.Core.Symlink.put_symlink_with_metadata(MyOss, "my-bucket", "link-object", "target-object", %{"description" => "My symlink"})
    :ok

# `symlink?`

```elixir
@spec symlink?(module(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  boolean()
```

检查对象是否为符号链接

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称

## 返回值
- boolean()

## 示例
    iex> LibOss.Core.Symlink.symlink?(MyOss, "my-bucket", "link-object")
    true

    iex> LibOss.Core.Symlink.symlink?(MyOss, "my-bucket", "normal-object")
    false

---

*Consult [api-reference.md](api-reference.md) for complete listing*
