📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

8行目: 8行目:


== S3へのアップロード ==
== S3へのアップロード ==
 
ローカルファイルをS3バケットにストリーム経由でアップロードするフローを以下に示す。<br>
# ClientConfigurationの作成
#: AWS SDKのクライアント設定オブジェクトを生成する。
# リージョンの設定
#: 指定されたAWSリージョンを設定する。
# S3クライアントの生成
<br>
==== S3クライアントの初期化 ====
指定されたリージョンでS3クライアントを初期化する。<br>
<br>
<syntaxhighlight lang="c++">
QString region = "<リージョン名>"
Aws::Client::ClientConfiguration clientConfig;
clientConfig.region = region.toStdString();
auto s3Client = std::make_unique<Aws::S3::S3Client>(clientConfig);
</syntaxhighlight>
<br>
==== アップロードフロー ====
* bucketName
*: アップロード先のS3バケット名
* objectKey
*: S3上でのオブジェクトキー (パス)
* filePath
*: アップロードするローカルファイルのパス
<br>
<syntaxhighlight lang="c++">
// 1. ファイル存在チェック
QFileInfo fileInfo(filePath);
if (!fileInfo.exists()) {
  return false;
}
// 2. PutObjectRequestの設定
Aws::S3::Model::PutObjectRequest request;
request.SetBucket(bucketName.toStdString());
request.SetKey(objectKey.toStdString());
// 3. ファイルストリームの作成
// Aws::MakeSharedは、AWS SDK専用のスマートポインタ
auto inputData = Aws::MakeShared<Aws::FStream>(
    "PutObjectInputStream",
    filePath.toStdString().c_str(),
    std::ios_base::in | std::ios_base::binary  // std::ios_base::binary でバイナリファイルにも対応
);
// 4. リクエストにデータを設定
request.SetBody(inputData);
request.SetContentLength(fileInfo.size());  // ファイルサイズを明示的に設定 (Content-Length)
// 5. アップロード実行
auto outcome = s3Client->PutObject(request);
</syntaxhighlight>
<br>
また、outcome.IsSuccessメソッドを使用して、成功 / 失敗を判定することができる。<br>
<br><br>
<br><br>