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 )
相關資料參考: