AWSにあるS3利用のサンプルは、ローカルファイルをアップロードするものでしたが、プログラム上で直接ファイルの内容を生成してPUTするにはどうしたらよいのか調べてみました。

通常のファイルアップロードは公式のサンプルが参考になります。

put_object.cpp – AWS Code Sample
https://docs.aws.amazon.com/ja_jp/code-samples/latest/catalog/cpp-s3-put_object.cpp.html

サンプルがありました

あれこれ調べてたらGitHubのAWS公式?アカウントでリポジトリが公開されていました。

aws-doc-sdk-examples/cpp at master · awsdocs/aws-doc-sdk-examples
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/cpp

こちらのC++のS3利用サンプルにput_object_buffer.cpp がありました。ありがたや

aws-doc-sdk-examples/put_object_buffer.cpp at master · awsdocs/aws-doc-sdk-examples https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/cpp/example_code/s3/put_object_buffer.cpp

put_object_buffer.cpp_一部抜粋

 const std::shared_ptr<Aws::IOStream> input_data =
        Aws::MakeShared<Aws::StringStream>("");
    *input_data << object_contents.c_str();
    object_request.SetBody(input_data);

*input_data << "hoge"; でファイル内容を追加できるみたいです。改行は\n で。

ここで利用されているAws::StringStream ですが、あまり情報がなくAWS公式サイトでソースコードが確認できるくらいでした。やっぱりC++はソースコード読めって感じなのかなぁ。怖い

AWS SDK for C++: aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h Source File
https://sdk.amazonaws.com/cpp/api/LATEST/_a_w_s_string_stream_8h_source.html

参考

put_object.cpp – AWS Code Sample
https://docs.aws.amazon.com/ja_jp/code-samples/latest/catalog/cpp-s3-put_object.cpp.html

aws-doc-sdk-examples/cpp at master · awsdocs/aws-doc-sdk-examples
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/cpp

AWS SDK for C++: aws-cpp-sdk-core/include/aws/core/utils/memory/stl/AWSStringStream.h Source File
https://sdk.amazonaws.com/cpp/api/LATEST/_a_w_s_string_stream_8h_source.html

元記事はこちら

AWS SDK for C++でS3にファイル作成する