1. はじめに
今年入って、Amazon Web Serviceを使用したアプリケーション開発する機会をいただき、様々なマネージドサービスに触りました。
その際、S3へファイルアップロードをする機能に携わったので、やった内容を残します。
環境
- macOS X 10.15.1
- .NET Core 2.1
- aws-sdk-dotnet
要件
- アップロードするファイルは主に動画ファイル(中には5GB以上のものも)
- アップロードしたファイルは、その後、各種マネージドサービスで利用可能性あり(動画変換、AI...)
- サービスポリシーの都合により、アップロードしたファイルとの整合性を担保する必要あり
2. やったこと
上記の要件を満たすために、ハッシュ値を使って整合性をとろうと考えました。AWSの様々な記事を読んでいくと、以下のことがわかりました。
- PUT API を使用すると、ETagにMD5のハッシュ値が入る
- ただし、マルチパートでアップロードすると、分割したファイルのMD5値を合算した値 – 分割数 になってしまうこと
- こちらを参照した
- マルチパートアップロードの場合は各パートのアップロード時に実行する UploadPart の Content-MD5 にて、パートのMD5ダイジェスト値を渡すことで整合性の確認を行うことが可能
以上のことから、リクエストデータの中にパートのMD5ダイジェスト値を入れてマルチパートを使用してアップロードを行う実装に決めました。
以下のソースコードが実装した物です。
https://github.com/Takkiiii/aws-s3-sample
※認証情報や、パスなどは任意で変えて実行してください。
以上。