Skip to content

Commit 440e3bc

Browse files
Merge pull request #105 from wqingzhang/hotfix-ci-pic
图片上传时处理兼容覆盖原图,不检查Etag
2 parents 8276a1e + 1b6a7d7 commit 440e3bc

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

include/cos_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ class CosAPI {
773773
/** 图片持久化处理 **/
774774

775775
/*** 上传时处理 ***/
776-
CosResult PutImage(const PutImageByFileReq& req, PutImageByFileResp* resp);
776+
CosResult PutImage(PutImageByFileReq& req, PutImageByFileResp* resp);
777777

778778
/*** 云上数据处理 ***/
779779
CosResult CloudImageProcess(const CloudImageProcessReq& req,

include/request/data_process_req.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ class PicOperation {
277277
PicOperation() : is_pic_info(true) {}
278278
virtual ~PicOperation() {}
279279

280+
std::vector<PicRules> GetRules() const { return rules; }
281+
280282
void AddRule(const PicRules& rule) { rules.push_back(rule); }
281283

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

606608
virtual ~PutImageByFileReq() {}
607609

610+
PicOperation GetPictureOperation() const { return m_pic_operation; }
611+
608612
void SetPicOperation(const PicOperation& pic_operation) {
609613
m_pic_operation = pic_operation;
610614
AddHeader("Pic-Operations", m_pic_operation.GenerateJsonString());
611615
}
612616

617+
// 检查图片处理的效果图文件是否覆盖了原图
618+
void CheckCoverOriginImage();
619+
613620
private:
614621
PicOperation m_pic_operation;
615622
};

src/cos_api.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,9 @@ CosResult CosAPI::MoveObject(const MoveObjectReq& req) {
582582
return m_object_op.MoveObject(req);
583583
}
584584

585-
CosResult CosAPI::PutImage(const PutImageByFileReq& req,
585+
CosResult CosAPI::PutImage(PutImageByFileReq& req,
586586
PutImageByFileResp* resp) {
587+
req.CheckCoverOriginImage();
587588
return m_object_op.PutImage(req, resp);
588589
}
589590

src/request/data_process_req.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,31 @@
77

88
namespace qcloud_cos {
99

10+
void PutImageByFileReq:: CheckCoverOriginImage() {
11+
std::vector<PicRules> pic_rules = m_pic_operation.GetRules();
12+
std::string object_name = GetObjectName();
13+
std::string object_dir = object_name.substr(0, object_name.find_last_of("/") + 1);
14+
for (std::vector<PicRules>::const_iterator c_itr = pic_rules.begin();
15+
c_itr != pic_rules.end(); ++c_itr) {
16+
const PicRules& pic_rule = *c_itr;
17+
std::string pic_absolute_key;
18+
if (StringUtil::StringStartsWith(pic_rule.fileid, "/")) {
19+
// fileid 以“/”开头为绝对路径
20+
pic_absolute_key = StringUtil::StringRemovePrefix(pic_rule.fileid, "/");
21+
} else {
22+
// fileid 不以“/”开头为相对路径
23+
pic_absolute_key = object_dir + pic_rule.fileid;
24+
}
25+
// 如果图片处理的效果图存放路径与上传文件路径相同,则会覆盖上传的原文件
26+
// 覆盖上传原文件后Etag与本地文件不相同,此时不比较Etag
27+
if (pic_absolute_key == object_name) {
28+
TurnOffCheckETag();
29+
TurnOffComputeConentMd5();
30+
break;
31+
}
32+
}
33+
}
34+
1035
bool CreateDocProcessJobsReq::GenerateRequestBody(std::string* body) const {
1136
rapidxml::xml_document<> doc;
1237
rapidxml::xml_node<>* root_node = doc.allocate_node(

0 commit comments

Comments
 (0)