📢 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> | ||