AWS Ruby SDK 做 S3 multipart upload
在某次資料庫備份的過程中,在最後要對 S3 put object 時,發生了 Aws::S3::Errors::EntityTooLarge 的錯誤,才找到相關解法。

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
)
相關資料參考:
延伸閱讀
加入 BNI 商會心得
於 2023/10 加入了 BNI 台南商會(大信白金),本篇文章將分享加入後的心得,並持續更新心得內容,確認在不同階段的自己是否有偏離初衷。
rails app(web) 嵌入到 iframe 中
ruby on rails 的 web 預設是無法嵌入到 HTML iframe 中的,本篇文章將教學如何使其成功在不同網域中將 rails web 成功嵌入到 iframe 中。
設定電子郵件 DMARC
提供設定 DMARC 的範例,並且提供官方語法說明和檢測工具連結。

