LibOss.Core.Multipart (lib_oss v0.3.0)

View Source

分片上传模块

负责:

  • 初始化:init_multi_upload
  • 上传分片:upload_part
  • 列表操作:list_multipart_uploads, list_parts
  • 完成/中止:complete_multipart_upload, abort_multipart_upload

Summary

Types

err_t()

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

Functions

abort_multipart_upload(name, bucket, object, upload_id)

@spec abort_multipart_upload(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.upload_id()
) :: :ok | err_t()

中止分片上传

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • object: 对象名称
  • upload_id: 上传ID

返回值

  • :ok | {:error, Exception.t()}

示例

iex> LibOss.Core.Multipart.abort_multipart_upload(MyOss, "my-bucket", "large-file.zip", "upload-id-123456")
:ok

相关文档

https://help.aliyun.com/document_detail/31996.html

calculate_part_count(file_size, part_size \\ 5_242_880)

@spec calculate_part_count(non_neg_integer(), non_neg_integer()) :: non_neg_integer()

计算文件分片数量

参数

  • file_size: 文件大小(字节)
  • part_size: 分片大小(字节,可选,默认5MB)

返回值

  • non_neg_integer()

示例

iex> LibOss.Core.Multipart.calculate_part_count(100 * 1024 * 1024)
20

complete_multipart_upload(name, bucket, object, upload_id, parts, headers \\ [])

完成分片上传

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • object: 对象名称
  • upload_id: 上传ID
  • parts: 分片列表,格式为 [{part_number, etag}, ...]
  • headers: 可选的HTTP请求头

返回值

  • :ok | {:error, Exception.t()}

示例

iex> parts = [{1, ""etag1""}, {2, ""etag2""}]
iex> LibOss.Core.Multipart.complete_multipart_upload(MyOss, "my-bucket", "large-file.zip", "upload-id-123456", parts)
:ok

相关文档

https://help.aliyun.com/document_detail/31995.html

init_multi_upload(name, bucket, object, req_headers \\ [])

初始化分片上传

参数

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

返回值

  • | {:error, Exception.t()}

示例

iex> LibOss.Core.Multipart.init_multi_upload(MyOss, "my-bucket", "large-file.zip")
{:ok, "upload-id-123456"}

相关文档

https://help.aliyun.com/document_detail/31992.html

list_multipart_uploads(name, bucket, query_params)

@spec list_multipart_uploads(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.params()
) :: {:ok, map()} | err_t()

列出分片上传任务

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • query_params: 查询参数

查询参数

  • key-marker: 起始对象名
  • upload-id-marker: 起始上传ID
  • max-uploads: 最大返回数量

返回值

  • | {:error, Exception.t()}

示例

iex> LibOss.Core.Multipart.list_multipart_uploads(MyOss, "my-bucket", %{"max-uploads" => "100"})
{:ok, %{uploads: [...], is_truncated: false}}

相关文档

https://help.aliyun.com/document_detail/31997.html

list_parts(name, bucket, object, upload_id, query_params \\ %{})

列出已上传的分片

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • object: 对象名称
  • upload_id: 上传ID
  • query_params: 查询参数(可选)

查询参数

  • part-number-marker: 起始分片号
  • max-parts: 最大返回数量

返回值

  • | {:error, Exception.t()}

示例

iex> LibOss.Core.Multipart.list_parts(MyOss, "my-bucket", "large-file.zip", "upload-id-123456")
{:ok, %{parts: [...], is_truncated: false}}

相关文档

https://help.aliyun.com/document_detail/31998.html

multipart_limits()

@spec multipart_limits() :: map()

获取分片上传限制信息

返回值

  • map()

示例

iex> LibOss.Core.Multipart.multipart_limits()
%{
  min_part_size: 5242880,
  max_part_size: 5368709120,
  max_parts: 10000
}

upload_part(name, bucket, object, upload_id, part_number, data)

上传分片

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • object: 对象名称
  • upload_id: 上传ID
  • part_number: 分片号(1-10000)
  • data: 分片数据

返回值

  • | {:error, Exception.t()}

分片限制

  • 分片号范围:1-10000
  • 分片大小:5MB-5GB(最后一个分片可以小于5MB)

示例

iex> LibOss.Core.Multipart.upload_part(MyOss, "my-bucket", "large-file.zip", "upload-id-123456", 1, data)
{:ok, ""etag-value""}

相关文档

https://help.aliyun.com/document_detail/31993.html

validate_multipart_params(file_size, part_size)

@spec validate_multipart_params(non_neg_integer(), non_neg_integer()) :: :ok | err_t()

验证分片上传参数

参数

  • file_size: 文件大小
  • part_size: 分片大小

返回值

  • :ok | {:error, Exception.t()}