努力載入中

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
)

相關資料參考:

相關文章

設定電子郵件 DKIM

設定電子郵件 DKIM

以 AWS SES 和 Gmail 為例,說明如何設定 DKIM,並且提供相關檢測工具。DKIM 除了需要透過 DNS TXT 設定完,需要先申請好簽署用的金鑰。
正念冥想使用心得

正念冥想使用心得

在實行正念冥想後一年半的日子裡,所獲得的體悟,以及對生活和工作上的改變,同時分享正念冥想的一些小技巧。
用 AWS Transfer + S3 架設 FTP

用 AWS Transfer + S3 架設 FTP

本篇文章將一步步教學如何利用 AWS 架設 FTP,使用的服務包含 AWS Transfer 、S3、SNS(Simple Notification Service)。實現檔案傳輸,以及被動獲得檔案上傳的通知。
Sidekiq 介面壞掉

Sidekiq 介面壞掉

很久以前修過的問題,再次出現時,又忘了為何如此,所以這次完整把 Sidekiq web 介面遇到的壞掉問題修復方式完整記錄起來。