View Source LibOss (lib_oss v0.1.0)

LibOss

LibOss是Elixir实现的一个阿里云oss的SDK,目前支持的功能有:

  • [ ] Object:

    • [ ] 基础操作:

      • [x] 上传文件
      • [x] 获取文件
      • [x] 删除文件
      • [x] 删除多个文件
      • [x] 获取前端直传签名
      • [x] 文件在bucket间拷贝
      • [x] 追加写文件
      • [x] 获取文件元信息
      • [ ] 通过HTML表单上传的方式将文件
      • [ ] 归档解冻
      • [ ] 执行SQL语句
    • [x] 分片上传:

      • [x] 分片上传发起
      • [x] 分片上传完成
      • [x] 分片上传取消
      • [x] 分片上传列表
      • [x] 列举指定uploadid已经成功上传的part
    • [x] 权限控制ACL

      • [x] 设置文件ACL
      • [x] 获取文件ACL
    • [x] 软连接

      • [x] 创建软连接
      • [x] 获取软连接
    • [x] 标签

      • [x] 设置标签
      • [x] 获取标签
      • [x] 删除标签
  • [ ] Bucket:

    • [x] 基础操作:

      • [x] 创建bucket
      • [x] 删除bucket
      • [x] 获取bucket中文件
      • [x] 获取bucket中文件V2
      • [x] 查看bucket的相关信息
      • [x] 获取bucket存储容量以及文件(Object)数量
      • [x] 查看bucket的位置信息
    • [ ] 接入点

      • [ ] 创建接入点
      • [ ] 删除接入点
      • [ ] 获取接入点
      • [ ] 列举接入点
      • [ ] 配置接入点策略配置
      • [ ] 获取接入点策略配置
      • [ ] 删除接入点策略配置
    • [x] 权限控制

      • [x] 设置bucket ACL
      • [x] 获取bucket ACL
    • [ ] 生命周期

    • [ ] 传输加速

    • [ ] 版本控制

    • [ ] 数据复制

    • [ ] 授权策略

    • [ ] 清单

    • [ ] 日志管理

    • [ ] 静态网站

    • [ ] 防盗链

    • [ ] 标签

    • [ ] 加密

    • [ ] 请求者付费

    • [ ] 访问跟踪

    • [ ] 数据索引

    • [ ] 高防

    • [ ] 资源组

    • [ ] 自定义域名

    • [ ] 图片样式

    • [ ] 归档直读

  • [ ] LiveChannel

使用方法

Mix.install([
  {:lib_oss, "~> 0.1.0"}
])

# 创建一个oss客户端
cli =
  LibOss.new(
    endpoint: "oss-cn-somewhere.aliyuncs.com",
    access_key_id: "your access key id",
    access_key_secret: "your access key secret"
  )

# 在superivsor中启动
Supervisor.start_link(
  [
    {LibOss, client: cli}
  ],
  strategy: :one_for_one
)

# 上传文件
{:ok, content} = File.read("./test.txt")
LibOss.put_object(cli, "hope-data", "/test/test.txt", content)

更多使用方法请参考API文档

Summary

Functions

AbortMultipartUpload接口用于取消MultipartUpload事件并删除对应的Part数据。

调用AppendObject接口用于以追加写的方式上传文件(Object)。

所有数据Part都上传完成后,您必须调用CompleteMultipartUpload接口来完成整个文件的分片上传。

调用CopyObject接口拷贝同一地域下相同或不同存储空间(Bucket)之间的文件(Object)。

调用DeleteBucket删除某个存储空间(Bucket)。

DeleteMultipleObjects接口用于删除同一个存储空间(Bucket)中的多个文件(Object)。

调用DeleteObject删除某个文件(Object)。

删除Object当前版本的标签信息。

GetBucket (ListObjects)接口用于列举存储空间(Bucket)中所有文件(Object)的信息。

GetBucketAcl接口用于获取某个存储空间(Bucket)的访问权限(ACL)。

调用GetBucketInfo接口查看存储空间(Bucket)的相关信息。

GetBucketLocation接口用于查看存储空间(Bucket)的位置信息。

调用GetBucketStat接口获取指定存储空间(Bucket)的存储容量以及文件(Object)数量。

GetObject接口用于获取某个文件(Object)。此操作需要对此Object具有读权限。

调用GetObjectACL接口获取存储空间(Bucket)下某个文件(Object)的访问权限(ACL)。

调用GetObjectMeta接口获取一个文件(Object)的元数据信息,包括该Object的ETag、Size、LastModified信息,并且不返回该Object的内容。

调用GetObjectTagging接口获取对象(Object)的标签(Tagging)信息。

调用GetSymlink接口获取软链接。

function description 通过Web端直传文件(Object)到OSS的签名生成

HeadObject接口用于获取某个文件(Object)的元信息。使用此接口不会返回文件内容。

使用Multipart Upload模式传输数据前,您必须先调用InitiateMultipartUpload接口来通知OSS初始化一个Multipart Upload事件。

调用ListMultipartUploads接口列举所有执行中的Multipart Upload事件,即已经初始化但还未完成(Complete)或者还未中止(Abort)的Multipart Upload事件。

ListObjectsV2(GetBucketV2)接口用于列举存储空间(Bucket)中所有文件(Object)的信息。

ListParts接口用于列举指定Upload ID所属的所有已经上传成功Part。

create a new oss client instance

PutBucketAcl接口用于设置或修改存储空间(Bucket)的访问权限(ACL)。

调用PutObject接口上传文件(Object)。

调用PutObjectACL接口修改文件(Object)的访问权限(ACL)

调用PutObjectTagging接口设置或更新对象(Object)的标签(Tagging)信息。

调用PutSymlink接口用于为OSS的目标文件(TargetObject)创建软链接(Symlink)

初始化一个MultipartUpload后,调用UploadPart接口根据指定的Object名和uploadId来分块(Part)上传数据。

Types

@type lib_oss_opts_t() :: [
  name: atom(),
  access_key_id: binary(),
  access_key_secret: binary(),
  endpoint: binary(),
  http_impl: term()
]
@type t() :: %LibOss{
  access_key_id: String.t(),
  access_key_secret: String.t(),
  endpoint: String.t(),
  http_impl: LibOss.Http.t(),
  name: atom()
}

Functions

Link to this function

abort_multipart_upload(client, bucket, object, upload_id)

View Source
@spec abort_multipart_upload(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  String.t()
) :: {:ok, any()} | {:error, LibOss.Error.t()}

AbortMultipartUpload接口用于取消MultipartUpload事件并删除对应的Part数据。

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

Examples

{:ok, return_value} = function_name()
Link to this function

append_object(client, bucket, object, since, data, headers \\ [])

View Source

调用AppendObject接口用于以追加写的方式上传文件(Object)。

Doc: https://help.aliyun.com/document_detail/31981.html

Examples

iex> LibOss.append_object(cli, bucket, "/test/test.txt", 0, "hello ")
iex> LibOss.append_object(cli, bucket, "/test/test.txt", 6, "world")
Link to this function

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

View Source
@spec complete_multipart_upload(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  String.t(),
  [{non_neg_integer(), bitstring()}],
  LibOss.Typespecs.headers()
) :: {:ok, any()} | {:error, LibOss.Error.t()}

所有数据Part都上传完成后,您必须调用CompleteMultipartUpload接口来完成整个文件的分片上传。

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

Examples

iex> {:ok, etag1} = upload_part(client, bucket, "test.txt", "upload_id", 1, part1)
iex> {:ok, etag2} = upload_part(client, bucket, "test.txt", "upload_id", 2, part2)
iex> {:ok, etag3} = upload_part(client, bucket, "test.txt", "upload_id", 3, part3)
iex> complete_multipart_upload(client, bucket, "test.txt", "upload_id", [{1, etag1}, {2, etag2}, {3, etag3}])
{:ok, _}
Link to this function

copy_object(client, bucket, object, source_bucket, source_object, headers \\ [])

View Source

调用CopyObject接口拷贝同一地域下相同或不同存储空间(Bucket)之间的文件(Object)。

Doc: https://help.aliyun.com/document_detail/31979.html

Examples

LibOss.copy_object(cli, target_bucket, "object_copy.txt", source_bucket, "object.txt")
Link to this function

delete_bucket(client, bucket)

View Source
@spec delete_bucket(t(), LibOss.Typespecs.bucket()) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

调用DeleteBucket删除某个存储空间(Bucket)。

Doc: https://help.aliyun.com/document_detail/31973.html

Examples

{:ok, _} = LibOss.delete_bucket(cli, to-delete-bucket)
Link to this function

delete_multiple_objects(client, bucket, objects)

View Source
@spec delete_multiple_objects(
  t(),
  LibOss.Typespecs.bucket(),
  [LibOss.Typespecs.object()]
) :: {:ok, any()} | {:error, LibOss.Error.t()}

DeleteMultipleObjects接口用于删除同一个存储空间(Bucket)中的多个文件(Object)。

Doc: https://help.aliyun.com/document_detail/31983.html

Examples

LibOss.delete_multiple_objects(cli, bucket, ["/test/test_1.txt", "/test/test_2.txt"]])
Link to this function

delete_object(client, bucket, object)

View Source
@spec delete_object(t(), LibOss.Typespecs.bucket(), String.t()) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

调用DeleteObject删除某个文件(Object)。

Doc: https://help.aliyun.com/document_detail/31982.html

Examples

{:ok, _} = LibOss.delete_object(cli, bucket, "/test/test.txt")
Link to this function

delete_object_tagging(client, bucket, object)

View Source
@spec delete_object_tagging(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

删除Object当前版本的标签信息。

Doc: https://help.aliyun.com/document_detail/114879.html

Examples

iex> LibOss.delete_object_tagging(cli, bucket, "/test/test.txt")
Link to this function

get_bucket(client, bucket, query_params)

View Source
@spec get_bucket(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.params()) ::
  {:ok, [any()]} | {:error, LibOss.Error.t()}

GetBucket (ListObjects)接口用于列举存储空间(Bucket)中所有文件(Object)的信息。

Doc: https://help.aliyun.com/document_detail/31965.html

其中query_params具体细节参考上面链接中请求参数部分

Examples

iex> LibOss.get_bucket(cli, bucket, %{"prefix" => "test/test"})
{:ok, [
  %{
   "ETag" => ""A5D2B2E40EF7EBA1C788697D31C27A78-3"",
   "Key" => "test/test.txt",
   "LastModified" => "2023-07-09T14:41:08.000Z",
   "Owner" => %{
     "DisplayName" => "1074124462684153",
     "ID" => "1074124462684153"
   },
   "Size" => "409608",
   "StorageClass" => "Standard",
   "Type" => "Multipart"
 },
 %{
   "ETag" => ""5EB63BBBE01EEED093CB22BB8F5ACDC3"",
   "Key" => "test/test_1.txt",
   "LastModified" => "2023-07-09T14:41:08.000Z",
   "Owner" => %{
     "DisplayName" => "1074124462684153",
     "ID" => "1074124462684153"
   },
   "Size" => "11",
   "StorageClass" => "Standard",
   "Type" => "Normal"
 }
]}
Link to this function

get_bucket_acl(client, bucket)

View Source
@spec get_bucket_acl(t(), LibOss.Typespecs.bucket()) ::
  {:ok, LibOss.Typespecs.string_dict()} | {:error, LibOss.Error.t()}

GetBucketAcl接口用于获取某个存储空间(Bucket)的访问权限(ACL)。

Doc: https://help.aliyun.com/document_detail/31966.html

Examples

iex> LibOss.get_bucket_acl(cli, bucket)
{:ok,
%{
   "AccessControlList" => %{"Grant" => "public-read"},
   "Owner" => %{"DisplayName" => "107412446268415", "ID" => "107412446264153"}
 }}
Link to this function

get_bucket_info(client, bucket)

View Source
@spec get_bucket_info(t(), LibOss.Typespecs.bucket()) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

调用GetBucketInfo接口查看存储空间(Bucket)的相关信息。

Doc: https://help.aliyun.com/document_detail/31968.html

Examples

iex> LibOss.get_bucket_info(cli, bucket)
{:ok,
 %{
   "Bucket" => %{
     "AccessControlList" => %{"Grant" => "public-read"},
     "AccessMonitor" => "Disabled",
     "BucketPolicy" => %{"LogBucket" => nil, "LogPrefix" => nil},
     "Comment" => nil,
     "CreationDate" => "2022-08-02T14:59:56.000Z",
     "CrossRegionReplication" => "Disabled",
     "DataRedundancyType" => "LRS",
     "ExtranetEndpoint" => "oss-cn-shenzhen.aliyuncs.com",
     "IntranetEndpoint" => "oss-cn-shenzhen-internal.aliyuncs.com",
     "Location" => "oss-cn-shenzhen",
     "Name" => "xxxx-data",
     "Owner" => %{
       "DisplayName" => "1074124462684153",
       "ID" => "1074124462684153"
     },
     "ResourceGroupId" => "rg-acfmv47nudzpp6i",
     "ServerSideEncryptionRule" => %{"SSEAlgorithm" => "None"},
     "StorageClass" => "Standard",
     "TransferAcceleration" => "Enabled"
   }
 }}
Link to this function

get_bucket_location(client, bucket)

View Source
@spec get_bucket_location(t(), LibOss.Typespecs.bucket()) ::
  {:ok, LibOss.Typespecs.bucket()} | {:error, LibOss.Error.t()}

GetBucketLocation接口用于查看存储空间(Bucket)的位置信息。

Doc: https://help.aliyun.com/document_detail/31967.html

Examples

iex> LibOss.get_bucket_location(cli, bucket)
{:ok, "oss-cn-shenzhen"}
Link to this function

get_bucket_stat(client, bucket)

View Source
@spec get_bucket_stat(t(), LibOss.Typespecs.bucket()) ::
  {:ok, LibOss.Typespecs.string_dict()} | {:error, LibOss.Error.t()}

调用GetBucketStat接口获取指定存储空间(Bucket)的存储容量以及文件(Object)数量。

Doc: https://help.aliyun.com/document_detail/426056.html

Examples

iex> LibOss.get_bucket_stat(cli, bucket)
{:ok, {:ok,
 %{
   "ArchiveObjectCount" => "0",
   "ArchiveRealStorage" => "0",
   "ArchiveStorage" => "0",
   "ColdArchiveObjectCount" => "0",
   "ColdArchiveRealStorage" => "0",
   "ColdArchiveStorage" => "0",
   "DeepColdArchiveObjectCount" => "0",
   "DeepColdArchiveRealStorage" => "0",
   "DeepColdArchiveStorage" => "0",
   "DeleteMarkerCount" => "0",
   "InfrequentAccessObjectCount" => "0",
   "InfrequentAccessRealStorage" => "0",
   "InfrequentAccessStorage" => "0",
   "LastModifiedTime" => "1690118142",
   "LiveChannelCount" => "0",
   "MultipartPartCount" => "59",
   "MultipartUploadCount" => "30",
   "ObjectCount" => "5413",
   "ReservedCapacityObjectCount" => "0",
   "ReservedCapacityStorage" => "0",
   "StandardObjectCount" => "5413",
   "StandardStorage" => "9619258561",
   "Storage" => "9619258561"
 }}
Link to this function

get_object(client, bucket, object, req_headers \\ [])

View Source
@spec get_object(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.headers()
) ::
  {:ok, iodata()} | {:error, LibOss.Error.t()}

GetObject接口用于获取某个文件(Object)。此操作需要对此Object具有读权限。

Doc: https://help.aliyun.com/document_detail/31980.html

req_headers的具体参数可参考文档中”请求头“部分说明

Examples

LibOss.get_object(cli, bucket, "/test/test.txt")
Link to this function

get_object_acl(client, bucket, object)

View Source
@spec get_object_acl(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, LibOss.Typespecs.acl()} | {:error, LibOss.Error.t()}

调用GetObjectACL接口获取存储空间(Bucket)下某个文件(Object)的访问权限(ACL)。

Doc: https://help.aliyun.com/document_detail/31987.html

Examples

iex> LibOss.get_object_acl(cli, bucket, "/test/test.txt")
{:ok, "public-read"}
Link to this function

get_object_meta(client, bucket, object)

View Source
@spec get_object_meta(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, LibOss.Typespecs.string_dict()} | {:error, LibOss.Error.t()}

调用GetObjectMeta接口获取一个文件(Object)的元数据信息,包括该Object的ETag、Size、LastModified信息,并且不返回该Object的内容。

Doc: https://help.aliyun.com/document_detail/31985.html

Examples

iex> LibOss.get_object_meta(cli, bucket, "/test/test.txt")
{:ok,
 %{
   "accept-ranges" => "bytes",
   "connection" => "keep-alive",
   "content-length" => "11",
   "content-md5" => "XrY7u+Ae7tCTyyK7j1rNww==",
   "content-type" => "text/plain",
   "date" => "Tue, 18 Jul 2023 06:29:10 GMT",
   "etag" => ""5EB63BBBE01EEED093CB22BB8F5ACDC3"",
   "last-modified" => "Tue, 18 Jul 2023 06:27:33 GMT",
   "server" => "AliyunOSS",
   "x-oss-hash-crc64ecma" => "5981764153023615706",
   "x-oss-object-type" => "Normal",
   "x-oss-request-id" => "64B631365A8AEE32306C9D64",
   "x-oss-server-time" => "2",
   "x-oss-storage-class" => "Standard"
 }}
Link to this function

get_object_tagging(client, bucket, object)

View Source
@spec get_object_tagging(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, [LibOss.Typespecs.string_dict()]} | {:error, LibOss.Error.t()}

调用GetObjectTagging接口获取对象(Object)的标签(Tagging)信息。

Doc: https://help.aliyun.com/document_detail/114878.html

Examples

iex> LibOss.get_object_tagging(cli, bucket, "/test/test.txt")
{:ok,
 [
   %{"Key" => "key1", "Value" => "value1"},
   %{"Key" => "key2", "Value" => "value2"}
 ]}
Link to this function

get_symlink(client, bucket, object)

View Source
@spec get_symlink(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.object()) ::
  {:ok, bitstring()} | {:error, LibOss.Error.t()}

调用GetSymlink接口获取软链接。

Doc: https://help.aliyun.com/document_detail/45146.html

Examples

iex> LibOss.get_symlink(cli, bucket, "/test/test.txt")
{:ok, "/test/test_symlink.txt"}
Link to this function

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

View Source
@spec get_token(
  cli :: t(),
  bucket :: LibOss.Typespecs.bucket(),
  object :: LibOss.Typespecs.object(),
  expire_sec :: non_neg_integer(),
  callback :: String.t()
) :: {:ok, String.t()}

function description 通过Web端直传文件(Object)到OSS的签名生成

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

Example

iex> LibOss.get_token(cli, bucket, "/test/test.txt")
{:ok, "{"accessid":"LTAI1k8kxWG8JpUF","callback":"=","dir":"/test/test.txt",".........ePNPyWQo="}"}
Link to this function

head_object(client, bucket, object, headers \\ [])

View Source

HeadObject接口用于获取某个文件(Object)的元信息。使用此接口不会返回文件内容。

Doc: https://help.aliyun.com/document_detail/31984.html

Examples

iex> LibOss.head_object(cli, bucket, "/test/test.txt")
{:ok,
 %{
   "accept-ranges" => "bytes",
   "connection" => "keep-alive",
   "content-length" => "11",
   "content-md5" => "XrY7u+Ae7tCTyyK7j1rNww==",
   "content-type" => "text/plain",
   "date" => "Tue, 18 Jul 2023 06:27:36 GMT",
   "etag" => ""5EB63BBBE01EEED093CB22BB8F5ACDC3"",
   "last-modified" => "Tue, 18 Jul 2023 06:27:33 GMT",
   "server" => "AliyunOSS",
   "x-oss-hash-crc64ecma" => "5981764153023615706",
   "x-oss-object-type" => "Normal",
   "x-oss-request-id" => "64B630D8E0DCB93335001974",
   "x-oss-server-time" => "1",
   "x-oss-storage-class" => "Standard"
 }}
Link to this function

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

View Source
@spec init_multi_upload(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.headers()
) :: {:ok, String.t()} | {:error, LibOss.Error.t()}

使用Multipart Upload模式传输数据前,您必须先调用InitiateMultipartUpload接口来通知OSS初始化一个Multipart Upload事件。

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

Examples

iex> init_multi_uploads(client, bucket, "test.txt")
{:ok, "upload_id"}
Link to this function

list_multipart_uploads(client, bucket, query_params)

View Source
@spec list_multipart_uploads(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.params()
) :: {:ok, [LibOss.Typespecs.string_dict()]} | {:error, LibOss.Error.t()}

调用ListMultipartUploads接口列举所有执行中的Multipart Upload事件,即已经初始化但还未完成(Complete)或者还未中止(Abort)的Multipart Upload事件。

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

Examples

iex> list_multipart_uploads(client, bucket, %{"delimiter"=>"/", "max-uploads" => 10, "prefix"=>"test/"})
{:ok,
 [
   %{
     "ETag" => ""1334928900AEB317206CC7EB950540EF-3"",
     "Key" => "test/multi-test.txt",
     "LastModified" => "2023-07-18T11:16:45.000Z",
     "Owner" => %{
       "DisplayName" => "1074124462684153",
       "ID" => "1074124462684153"
     },
     "Size" => "409608",
     "StorageClass" => "Standard",
     "Type" => "Multipart"
   },
   %{
     "ETag" => ""5EB63BBBE01EEED093CB22BB8F5ACDC3"",
     "Key" => "test/test.txt",
     "LastModified" => "2023-07-18T11:19:19.000Z",
     "Owner" => %{
       "DisplayName" => "1074124462684153",
       "ID" => "1074124462684153"
     },
     "Size" => "11",
     "StorageClass" => "Standard",
     "Type" => "Normal"
   }
 ]}
Link to this function

list_object_v2(client, bucket, query_params)

View Source
@spec list_object_v2(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.params()) ::
  {:ok, [any()]} | {:error, LibOss.Error.t()}

ListObjectsV2(GetBucketV2)接口用于列举存储空间(Bucket)中所有文件(Object)的信息。

Doc: https://help.aliyun.com/document_detail/187544.html

Examples

iex> LibOss.list_object_v2(cli, bucket, %{"prefix" => "test/test"})
{:ok,
 [
   %{
     "ETag" => ""A5D2B2E40EF7EBA1C788697D31C27A78-3"",
     "Key" => "test/test.txt",
     "LastModified" => "2023-07-09T14:41:08.000Z",
     "Owner" => %{
       "DisplayName" => "1074124462684153",
       "ID" => "1074124462684153"
     },
     "Size" => "409608",
     "StorageClass" => "Standard",
     "Type" => "Multipart"
   },
   %{
     "ETag" => ""5EB63BBBE01EEED093CB22BB8F5ACDC3"",
     "Key" => "test/test_1.txt",
     "LastModified" => "2023-07-09T14:41:08.000Z",
     "Owner" => %{
       "DisplayName" => "1074124462684153",
       "ID" => "1074124462684153"
     },
     "Size" => "11",
     "StorageClass" => "Standard",
     "Type" => "Normal"
   }
 ]}
Link to this function

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

View Source

ListParts接口用于列举指定Upload ID所属的所有已经上传成功Part。

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

Examples

{:ok, return_value} = function_name()
iex> LibOss.list_parts(cli, bucket, "test.txt", "upload_id")
{:ok,
 %{
  "ListPartsResult" => %{
    "Bucket" => "hope-data",
    "IsTruncated" => "false",
    "Key" => "test/multi-test.txt",
    "MaxParts" => "1000",
    "NextPartNumberMarker" => "3",
    "Part" => [
      %{
        "ETag" => ""3170FC594DACE56C506E0196B5DEA1D1"",
        "HashCrc64ecma" => "10873275732915280589",
        "LastModified" => "2023-07-19T02:58:16.000Z",
        "PartNumber" => "1",
        "Size" => "136536"
      },
      %{
        "ETag" => ""5539D60A05FD504B8210A662D7D15C1E"",
        "HashCrc64ecma" => "4592881501542342075",
        "LastModified" => "2023-07-19T02:58:17.000Z",
        "PartNumber" => "2",
        "Size" => "136536"
      },
      %{
        "ETag" => ""5C7D509F5744115EE3B2D55F4893FE3F"",
        "HashCrc64ecma" => "9048307046109329978",
        "LastModified" => "2023-07-19T02:58:17.000Z",
        "PartNumber" => "3",
        "Size" => "136536"
      }
    ],
    "PartNumberMarker" => "0",
    "StorageClass" => "Standard",
    "UploadId" => "39663F02E9384C87BFC9E9B0E8B1100E"
  }
}}
@spec new(lib_oss_opts_t()) :: t()

create a new oss client instance

Params

  • :name (atom/0) - LibOss name The default value is LibOss.

  • :access_key_id (String.t/0) - Required. OSS access key id

  • :access_key_secret (String.t/0) - Required. OSS access key secret

  • :endpoint (String.t/0) - Required. OSS endpoint

  • :http_impl (term/0) - HTTP client implementation of LibOss.Http The default value is %LibOss.Http.Default{name: LibOss.Http.Default}.

Examples

LibOss.new(
  endpoint: "oss-cn-hangzhou.aliyuncs.com",
  access_key_id: "access_key_id",
  access_key_secret: "access_key_secret"
)
Link to this function

put_bucket(client, bucket, storage_class \\ "Standard", data_redundancy_type \\ "LRS", headers \\ [])

View Source
@spec put_bucket(
  t(),
  LibOss.Typespecs.bucket(),
  bitstring(),
  bitstring(),
  LibOss.Typespecs.headers()
) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

调用PutBucket接口创建存储空间(Bucket)。

Doc: https://help.aliyun.com/document_detail/31959.html

Examples

{:ok, _} = LibOss.put_bucket(cli, your-new-bucket)
Link to this function

put_bucket_acl(client, bucket, acl)

View Source
@spec put_bucket_acl(t(), LibOss.Typespecs.bucket(), LibOss.Typespecs.acl()) ::
  {:ok, any()} | {:error, LibOss.Error.t()}

PutBucketAcl接口用于设置或修改存储空间(Bucket)的访问权限(ACL)。

Doc: https://help.aliyun.com/document_detail/31960.html

Examples

iex> LibOss.put_bucket_acl(cli, bucket, "public-read")
Link to this function

put_object(client, bucket, object, data, headers \\ [])

View Source

调用PutObject接口上传文件(Object)。

Doc: https://help.aliyun.com/document_detail/31978.html

Examples

LibOss.put_object(cli, bucket, "/test/test.txt", "hello world")
Link to this function

put_object_acl(client, bucket, object, acl)

View Source
@spec put_object_acl(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.acl()
) :: {:ok, any()} | {:error, LibOss.Error.t()}

调用PutObjectACL接口修改文件(Object)的访问权限(ACL)

Doc: https://help.aliyun.com/document_detail/31986.html

Examples

iex> LibOss.put_object_acl(cli, bucket, "/test/test.txt", "public-read")
Link to this function

put_object_tagging(client, bucket, object, tags)

View Source
@spec put_object_tagging(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  LibOss.Typespecs.string_dict()
) :: {:ok, any()} | {:error, LibOss.Error.t()}

调用PutObjectTagging接口设置或更新对象(Object)的标签(Tagging)信息。

Doc: https://help.aliyun.com/document_detail/114855.html

Examples

iex> LibOss.put_object_tagging(cli, bucket, "/test/test.txt", %{"key1" => "value1", "key2" => "value2"})
Link to this function

put_symlink(client, bucket, object, target_object, headers \\ [])

View Source

调用PutSymlink接口用于为OSS的目标文件(TargetObject)创建软链接(Symlink)

Doc: https://help.aliyun.com/document_detail/45126.html

Examples

iex> LibOss.put_symlink(cli, bucket, "/test/test.txt", "/test/test_symlink.txt")
Link to this function

upload_part(client, bucket, object, upload_id, partNumber, data)

View Source
@spec upload_part(
  t(),
  LibOss.Typespecs.bucket(),
  LibOss.Typespecs.object(),
  String.t(),
  non_neg_integer(),
  binary()
) :: {:ok, bitstring()} | {:error, LibOss.Error.t()}

初始化一个MultipartUpload后,调用UploadPart接口根据指定的Object名和uploadId来分块(Part)上传数据。

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

Examples

iex> upload_part(client, bucket, "test.txt", "upload_id", 1, "hello world")
{:ok, "etag"}