diff --git a/src/tencent_cos.cpp b/src/tencent_cos.cpp index 4371d22..6bce684 100644 --- a/src/tencent_cos.cpp +++ b/src/tencent_cos.cpp @@ -253,6 +253,40 @@ std::pair module::tencent_cos::exist(const std::string& appid, cos_pool_destroy(p); return {result,exist}; } +std::string module::tencent_cos::deldir(const std::string& appid,const std::string& endpoint,const std::string& access_key_id,const std::string& access_key_secret,const std::string& bucket_name,const std::string& prefix) +{ + if (prefix.empty() || prefix.back() != '/') { + return "code:0, error_code:invalid_prefix, error_msg:prefix must end with '/'"; + } + + cos_pool_t* p = NULL; + cos_string_t bucket; + cos_string_t object_prefix; + cos_status_t* s = NULL; + cos_request_options_t* options = NULL; + cos_pool_create(&p, NULL); + + options = cos_request_options_create(p); + options->config = cos_config_create(options->pool); + cos_str_set(&options->config->endpoint, endpoint.c_str()); + cos_str_set(&options->config->access_key_id, access_key_id.c_str()); + cos_str_set(&options->config->access_key_secret, access_key_secret.c_str()); + cos_str_set(&options->config->appid, appid.c_str()); + options->config->is_cname = COS_FALSE; + options->ctl = cos_http_controller_create(options->pool, 0); + + cos_str_set(&bucket, bucket_name.c_str()); + cos_str_set(&object_prefix, prefix.c_str()); + + s = cos_delete_objects_by_prefix(options, &bucket, &object_prefix); + + std::string result = ""; + if (!cos_status_is_ok(s)) { + result = "code:" + std::to_string(s->code) + ", error_code:" + s->error_code + ", error_msg:" + s->error_msg; + } + cos_pool_destroy(p); + return result; +} void module::tencent_cos::regist(sol::state* lua) { lua->new_usertype("fw_tencent_cos", @@ -260,7 +294,8 @@ void module::tencent_cos::regist(sol::state* lua) "upfile", &module::tencent_cos::upfile, "updata", &module::tencent_cos::updata, "del", &module::tencent_cos::del, - "exist", &module::tencent_cos::exist + "exist", &module::tencent_cos::exist, + "deldir", &module::tencent_cos::deldir ); } diff --git a/src/tencent_cos.h b/src/tencent_cos.h index a74b23e..5672b65 100644 --- a/src/tencent_cos.h +++ b/src/tencent_cos.h @@ -10,6 +10,7 @@ namespace module std::string updata(const std::string& appid,const std::string& endpoint,const std::string& access_key_id,const std::string& access_key_secret,const std::string& bucket_name,const std::string& object_name,const std::string_view& data); std::string del(const std::string& appid,const std::string& endpoint,const std::string& access_key_id,const std::string& access_key_secret,const std::string& bucket_name,const std::string& object_name); std::pair exist(const std::string& appid,const std::string& endpoint,const std::string& access_key_id,const std::string& access_key_secret,const std::string& bucket_name,const std::string& object_name); + std::string deldir(const std::string& appid,const std::string& endpoint,const std::string& access_key_id,const std::string& access_key_secret,const std::string& bucket_name,const std::string& prefix); static void regist(sol::state* lua); private: // 通过 imodule 继承 diff --git a/target/tencent_cos.lua b/target/tencent_cos.lua index 43bf712..e2435e5 100644 --- a/target/tencent_cos.lua +++ b/target/tencent_cos.lua @@ -29,6 +29,9 @@ end function tencent_cos:exist(appid,endpoint,access_key_id, access_key_secret,bucket_name,object_name) return self.module:exist(appid,endpoint,access_key_id, access_key_secret,bucket_name,object_name) end +function tencent_cos:deldir(appid,endpoint,access_key_id, access_key_secret,bucket_name,prefix) + return self.module:deldir(appid,endpoint,access_key_id, access_key_secret,bucket_name,prefix) +end function tencent_cos:self() return self.module:self() end