LibOss.Core.Token (lib_oss v0.3.0)

View Source

Token生成模块

负责:

  • Web上传令牌:get_token
  • 策略和签名生成

Summary

Functions

创建文件大小限制条件

创建内容类型条件

解析上传令牌信息

创建键前缀条件

验证上传令牌是否过期

获取令牌剩余有效时间(秒)

Types

err_t()

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

Functions

content_length_range(min_size, max_size)

@spec content_length_range(non_neg_integer(), non_neg_integer()) :: list()

创建文件大小限制条件

参数

  • min_size: 最小文件大小(字节)
  • max_size: 最大文件大小(字节)

返回值

  • list()

示例

iex> LibOss.Core.Token.content_length_range(1024, 10485760)
["content-length-range", 1024, 10485760]

content_type_condition(content_type)

@spec content_type_condition(binary()) :: list()

创建内容类型条件

参数

  • content_type: MIME类型

返回值

  • list()

示例

iex> LibOss.Core.Token.content_type_condition("image/jpeg")
["eq", "$content-type", "image/jpeg"]

get_token(name, bucket, object, expire_sec \\ 3600, callback \\ "")

@spec get_token(
  module(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  non_neg_integer(),
  binary()
) :: {:ok, binary()} | err_t()

生成Web上传令牌

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • object: 对象名称前缀
  • expire_sec: 过期时间(秒,默认3600秒)
  • callback: 回调URL(可选)

返回值

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

返回JSON格式的上传令牌,包含:

  • accessid: 访问密钥ID
  • host: 上传主机URL
  • policy: Base64编码的策略
  • signature: 签名
  • expire: 过期时间戳
  • dir: 对象前缀
  • callback: Base64编码的回调信息

示例

iex> LibOss.Core.Token.get_token(MyOss, "my-bucket", "uploads/", 3600, "https://example.com/callback")
{:ok, "{"accessid":"...","host":"https://my-bucket.oss-cn-hangzhou.aliyuncs.com","policy":"...","signature":"...","expire":1640995200,"dir":"uploads/","callback":"..."}"}

相关文档

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

get_token_with_policy(name, bucket, policy_conditions, expire_sec \\ 3600, callback \\ "")

@spec get_token_with_policy(
  module(),
  LibOss.Typespecs.bucket(),
  list(),
  non_neg_integer(),
  binary()
) ::
  {:ok, binary()} | err_t()

生成自定义策略的上传令牌

参数

  • name: Agent进程名称
  • bucket: 存储桶名称
  • policy_conditions: 策略条件列表
  • expire_sec: 过期时间(秒,默认3600秒)
  • callback: 回调URL(可选)

策略条件示例

[
  ["starts-with", "$key", "uploads/"],
  ["content-length-range", 1, 10485760],
  ["eq", "$content-type", "image/jpeg"]
]

返回值

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

示例

iex> conditions = [["starts-with", "$key", "photos/"], ["content-length-range", 1, 5242880]]
iex> LibOss.Core.Token.get_token_with_policy(MyOss, "my-bucket", conditions, 3600)
{:ok, "{"accessid":"...","host":"...","policy":"...","signature":"...","expire":1640995200,"dir":"","callback":""}"}

parse_token(token)

@spec parse_token(binary()) :: {:ok, map()} | err_t()

解析上传令牌信息

参数

  • token: 令牌JSON字符串

返回值

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

示例

iex> LibOss.Core.Token.parse_token(token_json)
{:ok, %{
  "accessid" => "...",
  "host" => "https://...",
  "expire" => 1640995200,
  "dir" => "uploads/"
}}

starts_with_condition(prefix)

@spec starts_with_condition(binary()) :: list()

创建键前缀条件

参数

  • prefix: 对象键前缀

返回值

  • list()

示例

iex> LibOss.Core.Token.starts_with_condition("uploads/images/")
["starts-with", "$key", "uploads/images/"]

token_expired?(token)

@spec token_expired?(binary()) :: boolean()

验证上传令牌是否过期

参数

  • token: 令牌JSON字符串

返回值

  • boolean()

示例

iex> LibOss.Core.Token.token_expired?(token_json)
false

token_remaining_time(token)

@spec token_remaining_time(binary()) :: {:ok, non_neg_integer()} | err_t()

获取令牌剩余有效时间(秒)

参数

  • token: 令牌JSON字符串

返回值

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

如果令牌已过期,返回0

示例

iex> LibOss.Core.Token.token_remaining_time(token_json)
{:ok, 3540}