23 #include <file_uploader_msgs/UploadFilesAction.h> 29 #include <aws/s3/S3Client.h> 30 #include <aws/core/utils/logging/LogMacros.h> 48 goal_handle.setRejected();
51 goal_handle.setAccepted();
52 auto goal = goal_handle.getGoal();
53 std::vector<UploadDescription> uploads(goal->files.size());
54 for (
size_t i=0; i<goal->files.size(); i++) {
60 std::vector<UploadDescription> completed_uploads;
62 auto feedback_callback = [&](
const std::vector<UploadDescription>& uploaded_files) {
63 completed_uploads = uploaded_files;
64 file_uploader_msgs::UploadFilesFeedback feedback;
65 feedback.num_remaining = uploads.size() - uploaded_files.size();
66 feedback.num_uploaded = uploaded_files.size();
67 goal_handle.publishFeedback(feedback);
71 uploads, bucket, feedback_callback);
72 file_uploader_msgs::UploadFilesResult result;
73 if (outcome.IsSuccess()) {
74 result.result_code.success =
static_cast<uint8_t
>(
true);
75 result.result_code.error_code = std::numeric_limits<int16_t>::lowest();
77 result.result_code.success =
static_cast<uint8_t
>(
false);
78 result.result_code.error_code =
static_cast<int16_t
>(outcome.GetError().GetErrorType());
80 for (
auto const& upload : completed_uploads) {
81 result.files_uploaded.push_back(upload.object_key);
83 if (actionlib_msgs::GoalStatus::PREEMPTING == goal_handle.getGoalStatus().status) {
85 goal_handle.setCanceled(result,
"");
88 if (!outcome.IsSuccess()) {
90 ss <<
"Goal was aborted due to error uploading files. Error Message: " << outcome.GetError().GetMessage();
91 goal_handle.setAborted(result, ss.str());
93 goal_handle.setSucceeded(result,
"");
99 AWS_LOG_INFO(__func__,
"Cancelling Goal");
virtual bool IsAvailable() const
virtual Model::PutObjectOutcome UploadFiles(const std::vector< UploadDescription > &upload_descriptions, const std::string &bucket, const boost::function< void(const std::vector< UploadDescription > &)> &feedback_callback)
virtual void CancelUpload()
static void UploadToS3(S3UploadManager &upload_manager, const std::string &bucket, T &goal_handle)
static void CancelUploadToS3(S3UploadManager &upload_manager)
actionlib::ActionServer< file_uploader_msgs::UploadFilesAction > UploadFilesActionServer
std::string GenerateObjectKey(const std::string &file_path, const std::string &prefix)