How to upload directory using transfer manager. #3399
Unanswered
sulaimansuhas
asked this question in
Q&A
Replies: 1 comment
-
Hey thanks for reaching out, we typically ask for minimal reproducible example when looking into a issue. I created a short test applicaiton for you that should work for you. CMakeLists.txt: cmake_minimum_required(VERSION 3.13)
project(sdk_usage_workspace)
set(CMAKE_CXX_STANDARD 20)
find_package(AWSSDK REQUIRED COMPONENTS transfer s3)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PRIVATE ${AWSSDK_LINK_LIBRARIES})
main.cpp: #include <aws/core/Aws.h>
#include <aws/core/utils/threading/PooledThreadExecutor.h>
#include <aws/s3/S3Client.h>
#include <aws/transfer/TransferManager.h>
using namespace Aws;
using namespace Aws::S3;
using namespace Aws::Transfer;
using namespace Aws::Utils;
using namespace Aws::Utils::Threading;
namespace {
const char* LOG_TAG = "test-app";
}
auto main(int argc, char *argv[]) -> int {
if (argc != 4) {
std::cout << "Usage: " << argv[0] << "local-directory bucket-name prefix" << std::endl;
return EXIT_FAILURE;
}
const char* directory = argv[1];
const char* bucketName = argv[2];
const char* prefix = argv[3];
SDKOptions options{};
options.loggingOptions.logLevel = Logging::LogLevel::Debug;
InitAPI(options);
{
PooledThreadExecutor pooled_thread_executor{1};
auto client = Aws::MakeShared<S3Client>(LOG_TAG);
TransferManagerConfiguration configuration{&pooled_thread_executor};
configuration.s3Client = std::move(client);
configuration.transferInitiatedCallback = [](const TransferManager*,
const std::shared_ptr<const TransferHandle> &handle) -> void
{
std::cout << "Started upload for: " << handle->GetKey() << "\n";
};
configuration.transferStatusUpdatedCallback = [](const TransferManager*,
const std::shared_ptr<const TransferHandle> &handle) -> void
{
if (handle->GetStatus() == TransferStatus::COMPLETED) {
std::cout << "Upload completed for: " << handle->GetKey() << "\n";
} else if (handle->GetStatus() == TransferStatus::IN_PROGRESS) {
std::cout << "Upload in progress: " << handle->GetKey() << "\n";
} else if (handle->GetStatus() == TransferStatus::FAILED) {
std::cout << "Upload failed: " << handle->GetKey() << "\n";
}
};
configuration.errorCallback = [](const TransferManager*,
const std::shared_ptr<const TransferHandle> &handle,
const Client::AWSError<S3Errors> &error) -> void
{
std::cout << "Error: " << handle->GetKey() << ", "
<< error.GetExceptionName() << ", "
<< error.GetMessage()<< "\n";
};
const auto manager = TransferManager::Create(configuration);
manager->UploadDirectory(directory, bucketName, prefix, {});
manager->WaitUntilAllFinished();
}
ShutdownAPI(options);
return 0;
} if you run it using something like
you should see logs like
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hey, I have been trying to upload directories using transfer manager as I see it is an available function. My code looks somewhat like this:
When this code is run nothing happens: the call backs don't get called, nothing particular is showing up in the logs. Any help here would be appreciated!
Beta Was this translation helpful? Give feedback.
All reactions