AWS Ruby SDK 做 S3 multipart upload
2020-08-04
S3 multipart upload 最主要用於可以分段上傳同一個檔案到 S3 上,如此便可進行同步上傳,以加快上傳所花費的等候時間,還有一個好處就是可以上傳較大的檔案,因為用一般的 .put_object 的話,檔案過大會發生 Aws::S3::Errors::EntityTooLarge 的 error,而 multipart upload 則上限可以到 5TB,如果切成多個 part 上傳的話,每個 part 不能超過 5GB,最後一個 part 則不在 5GB 限制內。
以下示範:
file = File.open(filepath, 'rb')
s3_client = ::Aws::S3::Client.new
bucket = 'my_bucket'
key = 'path/to/object.gz'
# 初始化
result = s3_client.create_multipart_upload(bucket: bucket, key: key)
upload_id = result.upload_id
# 上傳其中一個 part,這裡只示範一個 part
part_result = s3_client.upload_part(
body: file,
bucket: bucket,
key: key,
upload_id: upload_id,
part_number: 1
)
# 完成上傳
s3_client.complete_multipart_upload(
bucket: bucket,
key: key,
multipart_upload: {
parts: [
{
etag: part_result.etag,
part_number: 1
}
]
},
upload_id: upload_id
)
相關資料參考:

