File tree Expand file tree Collapse file tree 4 files changed +35
-2
lines changed Expand file tree Collapse file tree 4 files changed +35
-2
lines changed Original file line number Diff line number Diff 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,
Original file line number Diff line number Diff 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};
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 77
88namespace 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+
1035bool CreateDocProcessJobsReq::GenerateRequestBody (std::string* body) const {
1136 rapidxml::xml_document<> doc;
1237 rapidxml::xml_node<>* root_node = doc.allocate_node (
You can’t perform that action at this time.
0 commit comments