c++ - 亚马逊示例 transfermanager 代码无法编译
问题描述
我无法找到 AWS C++ SDK 传输管理器的工作示例。AWS 提供的示例在 Ubuntu 18.04 上使用 GCC 7.0.4 编译失败它有很多错误,首先是没有 TransferManagerConfiguration 的默认构造函数。
我实际上是在尝试找到某种方法来使用 C++ SDK 获取大于 2GB 的对象。我可以用其他语言这样做。我正试图让转移经理工作,看看是否能解决这个问题。但我无法获取 Amazon 提供的示例代码以在 Windows 或 Linux 上构建。该示例来自他们的“准备生产”博客文章。
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/transfer/TransferManager.h>
static const char* ALLOC_TAG = "main";
int main()
{
Aws::SDKOptions options;
Aws::InitAPI(options);
auto s3Client = Aws::MakeShared<Aws::S3::S3Client>(ALLOC_TAG);
Aws::Transfer::TransferManagerConfiguration transferConfig;
transferConfig.s3Client = s3Client;
transferConfig.transferStatusUpdatedCallback =
[](const TransferManager*, const TransferHandle& handle)
{ std::cout << "Transfer Status = " << static_cast(handle.GetStatus()) << "\n"; }
transferConfig.uploadProgressCallback =
[](const TransferManager*, const TransferHandle& handle)
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of "
<< handle.GetBytesTotalSize() << " bytes\n"; };
transferConfig.downloadProgressCallback =
[](const TransferManager*, const TransferHandle& handle)
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of "
<< handle.GetBytesTotalSize() << " bytes\n"; };
Aws::Transfer::TransferManager transferManager(transferConfig);
auto transferHandle = transferManager.UploadFile("/user/aws/giantFile",
"aws_cpp_ga", "giantFile",
"text/plain", Aws::Map<Aws::String, Aws::String>());
transferHandle.WaitUntilFinished();
Aws::ShutdownAPI(options);
return 0;
}
我希望它能够构建和上传文件。
解决方案
这是我的首选模板。真的很烦 Aws 忘记更新它的教程。
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/transfer/TransferManager.h>
static const char *ALLOC_TAG = "main";
/*
* referenced from:
* https://github.com/aws/aws-sdk-cpp/blob/master/aws-cpp-sdk-transfer-tests/TransferTests.cpp
*/
int main() {
Aws::SDKOptions options;
// for debug purpose since transfer mngr fails silently.
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
Aws::InitAPI(options);
Aws::Client::ClientConfiguration clientConfiguration;
clientConfiguration.endpointOverride = "https//store-test.example.com";
clientConfiguration.region = "store-test";
using namespace Aws::Transfer;
using namespace Aws::Utils;
auto s3Client = Aws::MakeShared<Aws::S3::S3Client>(ALLOC_TAG, clientConfiguration);
auto thread_executor =
Aws::MakeShared<Threading::PooledThreadExecutor>(ALLOC_TAG, 4);
Aws::Transfer::TransferManagerConfiguration transferConfig(
thread_executor.get());
transferConfig.s3Client = s3Client;
transferConfig.transferStatusUpdatedCallback =
[](const TransferManager *,
const std::shared_ptr<const TransferHandle> &handle) {
std::cout << "Transfer Status = "
<< static_cast<int>(handle->GetStatus()) << "\n";
};
transferConfig.uploadProgressCallback =
[](const TransferManager *,
const std::shared_ptr<const TransferHandle> &handle) {
std::cout << "Upload Progress: " << handle->GetBytesTransferred()
<< " of " << handle->GetBytesTotalSize() << " bytes\n";
};
auto transferManager = TransferManager::Create(transferConfig);
auto transferHandle = transferManager->UploadFile(
"/user/aws/giantFile", "aws_cpp_ga", "giantFile", "text/plain",
Aws::Map<Aws::String, Aws::String>());
transferHandle->WaitUntilFinished();
/* you may need to reset the thread pool before shutdown API */
thread_executor.reset();
Aws::ShutdownAPI(options);
return 0;
}
推荐阅读
- node.js - Mongodb合并更新子文档中的嵌套字段
- c# - 为什么物体从一侧碰撞时不会换边
- visual-studio - SSAS Visual Studio 中缺少必需的列
- flutter - 如果前一个元素为空,则不添加下一个元素
- python - 多线程或多进程
- typescript - 如何从 TypeScript 中的其他服务动态访问方法?
- abap - MM中计算模式的功能模块
- c# - 如何将 int 数格式化为十进制/双精度数
- reactjs - 错误:无法向 https://www.gstatic.com/firebasejs/releases.json firebase init 发出请求
- variables - 如何使 Kubernetes 集群中的 POD 可以访问全局环境变量