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

对象操作模块

负责基础对象操作：
- 基础对象操作：put_object, get_object, delete_object, copy_object
- 追加写：append_object
- 元数据：head_object, get_object_meta
- 批量删除：delete_multiple_objects

# `err_t`

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

# `append_object`

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

追加写对象

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称
- since: 追加位置
- data: 追加的数据
- headers: 可选的HTTP请求头

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

## 示例
    iex> LibOss.Core.Object.append_object(MyOss, "my-bucket", "my-object", 0, "Hello")
    :ok

# `copy_object`

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

复制对象

## 参数
- name: Agent进程名称
- bucket: 目标存储桶名称
- object: 目标对象名称
- source_bucket: 源存储桶名称
- source_object: 源对象名称
- headers: 可选的HTTP请求头

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

## 示例
    iex> LibOss.Core.Object.copy_object(MyOss, "dest-bucket", "dest-object", "src-bucket", "src-object")
    :ok

# `delete_multiple_objects`

```elixir
@spec delete_multiple_objects(module(), LibOss.Typespecs.bucket(), [
  LibOss.Typespecs.object()
]) ::
  :ok | err_t()
```

批量删除对象

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

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

## 示例
    iex> LibOss.Core.Object.delete_multiple_objects(MyOss, "my-bucket", ["obj1", "obj2", "obj3"])
    :ok

# `delete_object`

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

删除对象

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

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

## 示例
    iex> LibOss.Core.Object.delete_object(MyOss, "my-bucket", "my-object")
    :ok

# `get_object`

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

获取对象

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称
- req_headers: 可选的HTTP请求头

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

## 示例
    iex> LibOss.Core.Object.get_object(MyOss, "my-bucket", "my-object")
    {:ok, "Hello World"}

# `get_object_meta`

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

获取对象元数据

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

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

## 示例
    iex> LibOss.Core.Object.get_object_meta(MyOss, "my-bucket", "my-object")
    {:ok, %{"content-length" => "11", "etag" => ""5d41402abc4b2a76b9719d911017c592""}}

# `get_object_size`

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

获取对象大小

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

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

## 示例
    iex> LibOss.Core.Object.get_object_size(MyOss, "my-bucket", "my-object")
    {:ok, 1024}

# `head_object`

```elixir
@spec head_object(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.headers()
) :: {:ok, LibOss.Typespecs.dict()} | err_t()
```

获取对象头部信息

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称
- headers: 可选的HTTP请求头

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

## 示例
    iex> LibOss.Core.Object.head_object(MyOss, "my-bucket", "my-object")
    {:ok, %{"content-length" => "11", "content-type" => "text/plain"}}

# `object_exists?`

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

检查对象是否存在

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

## 返回值
- boolean()

## 示例
    iex> LibOss.Core.Object.object_exists?(MyOss, "my-bucket", "my-object")
    true

# `put_object`

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

上传对象

## 参数
- name: Agent进程名称
- bucket: 存储桶名称
- object: 对象名称
- data: 对象数据
- headers: 可选的HTTP请求头

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

## 示例
    iex> LibOss.Core.Object.put_object(MyOss, "my-bucket", "my-object", "Hello World")
    :ok

---

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