Aliyun.Oss.Object.MultipartUpload (aliyun_oss v1.0.0)

Multipart Upload

使用 Multipart Upload 模式上传数据

iex> part_bytes = 102400 # The minimum allowed size is 100KB.
iex> parts = File.stream!("/path/to/file", [], part_bytes)
iex> Aliyun.Oss.Object.MultipartUpload.upload("some-bucket", "some-object", parts)
{:ok, %Aliyun.Oss.Client.Response{
    data: %{
      "CompleteMultipartUploadResult" => %{
      "Bucket" => "some-bucket",
      "ETag" => ""21000000000000000000000000000000-1"",
      "Key" => "some-object",
      "Location" => "https://some-bucket.oss-cn-shenzhen.aliyuncs.com/some-object"
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}

Link to this section Summary

Functions

AbortMultipartUpload 用于终止 MultipartUpload 事件。您需要提供 MultipartUpload 事件相应的 Upload ID。

CompleteMultiUpload 在将所有数据 Part 都上传完成后,必须调用 CompleteMultipartUpload 接口来完成整个文件的 MultipartUpload。

InitiateMultipartUpload 初始化一个 Multipart Upload 事件

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

ListMultipartUploads 来列举所有执行中的 Multipart Upload 事件,即已经初始化但还未 Complete 或者 Abort 的 Multipart Upload 事件。

使用 Multipart Upload 上传数据

UploadPart 初始化一个 MultipartUpload 之后,可以根据指定的 Object 名和 Upload ID 来分块(Part)上传数据。

UploadPartCopy 通过从一个已存在的 Object 中拷贝数据来上传一个 Part。

Link to this section Types

Specs

error() ::
  %Aliyun.Oss.Client.Error{
    body: String.t(),
    parsed_details: map(),
    status_code: integer()
  }
  | atom()

Link to this section Functions

Link to this function

abort_upload(bucket, object, upload_id)

Specs

abort_upload(String.t(), String.t(), String.t()) ::
  {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

AbortMultipartUpload 用于终止 MultipartUpload 事件。您需要提供 MultipartUpload 事件相应的 Upload ID。

Examples

iex> Aliyun.Oss.Object.MultipartUpload.abort_upload("some-bucket", "some-object", "UPLOAD_ID")
{:ok, %Aliyun.Oss.Client.Response{
    data: "",
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

complete_upload(bucket, object, upload_id, parts, headers \\ %{})

Specs

complete_upload(
  String.t(),
  String.t(),
  String.t(),
  [{integer(), String.t()}],
  map()
) :: {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

CompleteMultiUpload 在将所有数据 Part 都上传完成后,必须调用 CompleteMultipartUpload 接口来完成整个文件的 MultipartUpload。

Examples

iex> uploaded_parts = [{1, "ETAG_FOR_PART1}, {2, "ETAG_FOR_PART2}]
iex> Aliyun.Oss.Object.MultipartUpload.complete_upload("some-bucket", "some-object", "UPLOAD_ID", uploaded_parts)
{:ok, %Aliyun.Oss.Client.Response{
    data: %{
      "CompleteMultipartUploadResult" => %{
        "Bucket" => "some-bucket",
        "ETag" => ""21000000000000000000000000000000-1"",
        "Key" => "some-object",
        "Location" => "https://some-bucket.oss-cn-shenzhen.aliyuncs.com/some-object"
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

init_upload(bucket, object, headers \\ %{}, opts \\ [])

Specs

init_upload(String.t(), String.t(), map(), [{:encoding_type, :url}]) ::
  {:error, error()} | {:ok, String.t()}

InitiateMultipartUpload 初始化一个 Multipart Upload 事件

Options

  • :encoding_type - default is blank, accept value: :url

Examples

iex> Aliyun.Oss.Object.MultipartUpload.init_upload("some-bucket", "some-object")
{:ok, "UPLOAD_ID"}
Link to this function

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

Specs

list_parts(String.t(), String.t(), String.t(), map()) ::
  {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

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

Examples

iex> Aliyun.Oss.Object.MultipartUpload.list_parts("some-bucket", "some-object", "UPLOAD_ID")
{:ok, %Aliyun.Oss.Client.Response{
    data:  %{
      "ListPartsResult" => %{
        "Bucket" => "some-bucket",
        "IsTruncated" => false,
        "Key" => "some-object",
        "MaxParts" => "1000",
        "NextPartNumberMarker" => "2",
        "Part" => [
          %{
            "ETag" => ""09000000000000000000000000000000"",
            "HashCrc64ecma" => "15248619871383844432",
            "LastModified" => "2018-05-14T08:03:26.000Z",
            "PartNumber" => "1",
            "Size" => "1538"
          },
          %{
            "ETag" => ""2A000000000000000000000000000000"",
            "HashCrc64ecma" => "13658734736388254586",
            "LastModified" => "2018-05-14T08:03:37.000Z",
            "PartNumber" => "2",
            "Size" => "18"
          }
        ],
        "PartNumberMarker" => "0",
        "StorageClass" => "Standard",
        "UploadId" => "UPLOAD_ID"
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

list_uploads(bucket, query_params \\ %{})

Specs

list_uploads(String.t(), map()) ::
  {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

ListMultipartUploads 来列举所有执行中的 Multipart Upload 事件,即已经初始化但还未 Complete 或者 Abort 的 Multipart Upload 事件。

Examples

iex> Aliyun.Oss.Object.MultipartUpload.list_uploads("some-bucket")
{:ok, %Aliyun.Oss.Client.Response{
    data: %{
      "ListMultipartUploadsResult" => %{
        "Bucket" => "some-bucket",
        "Delimiter" => nil,
        "IsTruncated" => false,
        "KeyMarker" => nil,
        "MaxUploads" => "1000",
        "NextKeyMarker" => nil,
        "NextUploadIdMarker" => nil,
        "Prefix" => nil,
        "Upload" => [
          %{
            "Initiated" => "2018-05-14T07:59:10.000Z",
            "Key" => "some-object",
            "StorageClass" => "Standard",
            "UploadId" => "UPLOAD_ID"
          },
          %{
            "Initiated" => "2018-05-14T07:59:10.000Z",
            "Key" => "some-object",
            "StorageClass" => "Standard",
            "UploadId" => "UPLOAD_ID"
          }
        ],
        "UploadIdMarker" => nil
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

upload(bucket, object, parts)

Specs

upload(String.t(), String.t(), Enum.t()) ::
  {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

使用 Multipart Upload 上传数据

Examples

iex> part_bytes = 102400 # The minimum allowed size is 100KB.
iex> parts = File.stream!("/path/to/file", [], part_bytes)
iex> Aliyun.Oss.Object.MultipartUpload.upload("some-bucket", "some-object", parts)
{:ok, %Aliyun.Oss.Client.Response{
    data: %{
      "CompleteMultipartUploadResult" => %{
      "Bucket" => "some-bucket",
      "ETag" => ""21000000000000000000000000000000-1"",
      "Key" => "some-object",
      "Location" => "https://some-bucket.oss-cn-shenzhen.aliyuncs.com/some-object"
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

upload_part(bucket, object, upload_id, part_number, body)

Specs

upload_part(String.t(), String.t(), String.t(), integer(), String.t()) ::
  {:error, error()} | {:ok, Aliyun.Oss.Client.Response.t()}

UploadPart 初始化一个 MultipartUpload 之后,可以根据指定的 Object 名和 Upload ID 来分块(Part)上传数据。

Examples

iex> Aliyun.Oss.Object.MultipartUpload.upload_part("some-bucket", "some-object", "UPLOAD_ID", 1, "CONTENT")
{:ok, %Aliyun.Oss.Client.Response{
    data: "",
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}
Link to this function

upload_part_copy(bucket, object, upload_id, part_number, copy_source, copy_source_range \\ "", headers \\ %{})

UploadPartCopy 通过从一个已存在的 Object 中拷贝数据来上传一个 Part。

Examples

iex> Aliyun.Oss.Object.MultipartUpload.upload_part_copy("some-bucket", "some-object", "UPLOAD_ID", 1, "/SourceBucketName/SourceObjectName")
{:ok, %Aliyun.Oss.Client.Response{
    data: %{
      "CopyPartResult" => %{
        "ETag" => ""09800000000000000000000000000000"",
        "LastModified" => "2017-05-14T07:44:26.000Z"
      }
    },
    headers: [
      {"Server", "AliyunOSS"},
      {"Date", "Wed, 05 Dec 2018 02:34:57 GMT"},
      ...
    ]
  }
}