Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/cos_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -773,7 +773,7 @@ class CosAPI {
/** 图片持久化处理 **/

/*** 上传时处理 ***/
CosResult PutImage(const PutImageByFileReq& req, PutImageByFileResp* resp);
CosResult PutImage(PutImageByFileReq& req, PutImageByFileResp* resp);

/*** 云上数据处理 ***/
CosResult CloudImageProcess(const CloudImageProcessReq& req,
Expand Down
7 changes: 7 additions & 0 deletions include/request/data_process_req.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ class PicOperation {
PicOperation() : is_pic_info(true) {}
virtual ~PicOperation() {}

std::vector<PicRules> GetRules() const { return rules; }

void AddRule(const PicRules& rule) { rules.push_back(rule); }

void TurnOffPicInfo() { is_pic_info = false; }
Expand Down Expand Up @@ -605,11 +607,16 @@ class PutImageByFileReq : public PutObjectByFileReq {

virtual ~PutImageByFileReq() {}

PicOperation GetPictureOperation() const { return m_pic_operation; }

void SetPicOperation(const PicOperation& pic_operation) {
m_pic_operation = pic_operation;
AddHeader("Pic-Operations", m_pic_operation.GenerateJsonString());
}

// 检查图片处理的效果图文件是否覆盖了原图
void CheckCoverOriginImage();

private:
PicOperation m_pic_operation;
};
Expand Down
3 changes: 2 additions & 1 deletion src/cos_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -582,8 +582,9 @@ CosResult CosAPI::MoveObject(const MoveObjectReq& req) {
return m_object_op.MoveObject(req);
}

CosResult CosAPI::PutImage(const PutImageByFileReq& req,
CosResult CosAPI::PutImage(PutImageByFileReq& req,
PutImageByFileResp* resp) {
req.CheckCoverOriginImage();
return m_object_op.PutImage(req, resp);
}

Expand Down
25 changes: 25 additions & 0 deletions src/request/data_process_req.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,31 @@

namespace qcloud_cos {

void PutImageByFileReq:: CheckCoverOriginImage() {
std::vector<PicRules> pic_rules = m_pic_operation.GetRules();
std::string object_name = GetObjectName();
std::string object_dir = object_name.substr(0, object_name.find_last_of("/") + 1);
for (std::vector<PicRules>::const_iterator c_itr = pic_rules.begin();
c_itr != pic_rules.end(); ++c_itr) {
const PicRules& pic_rule = *c_itr;
std::string pic_absolute_key;
if (StringUtil::StringStartsWith(pic_rule.fileid, "/")) {
// fileid 以“/”开头为绝对路径
pic_absolute_key = StringUtil::StringRemovePrefix(pic_rule.fileid, "/");
} else {
// fileid 不以“/”开头为相对路径
pic_absolute_key = object_dir + pic_rule.fileid;
}
// 如果图片处理的效果图存放路径与上传文件路径相同,则会覆盖上传的原文件
// 覆盖上传原文件后Etag与本地文件不相同,此时不比较Etag
if (pic_absolute_key == object_name) {
TurnOffCheckETag();
TurnOffComputeConentMd5();
break;
}
}
}

bool CreateDocProcessJobsReq::GenerateRequestBody(std::string* body) const {
rapidxml::xml_document<> doc;
rapidxml::xml_node<>* root_node = doc.allocate_node(
Expand Down