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