object_resp.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. // Copyright (c) 2017, Tencent Inc.
  2. // All rights reserved.
  3. //
  4. // Author: sevenyou <sevenyou@tencent.com>
  5. // Created: 07/21/17
  6. // Description:
  7. #ifndef OBJECT_RESP_H
  8. #define OBJECT_RESP_H
  9. #pragma once
  10. #include <iostream>
  11. #include <vector>
  12. #include "cos_config.h"
  13. #include "cos_params.h"
  14. #include "response/base_resp.h"
  15. namespace qcloud_cos {
  16. class GetObjectResp : public BaseResp {
  17. public:
  18. /// \brief 获取object type, 表示object是否可以被追加上传,枚举值:normal 或者
  19. /// appendable
  20. std::string GetXCosObjectType() const { return m_x_cos_object_type; }
  21. void SetXCosObjectType(const std::string& x_cos_object_type) {
  22. m_x_cos_object_type = x_cos_object_type;
  23. }
  24. /// \brief 获取自定义的元数据
  25. std::map<std::string, std::string> GetXCosMetas() const {
  26. return m_x_cos_metas;
  27. }
  28. /// \brief 获取自定义的元数据
  29. std::string GetXCosMeta(const std::string& key) const {
  30. std::map<std::string, std::string>::const_iterator itr =
  31. m_x_cos_metas.find(key);
  32. if (itr != m_x_cos_metas.end()) {
  33. return itr->second;
  34. }
  35. return "";
  36. }
  37. void SetXCosMeta(const std::string& key, const std::string& value) {
  38. m_x_cos_metas[key] = value;
  39. }
  40. /// \brief Server端加密使用的算法
  41. std::string GetXCosServerSideEncryption() const {
  42. return GetHeader("x-cos-server-side-encryption");
  43. }
  44. void ParseFromHeaders(const std::map<std::string, std::string>& headers);
  45. protected:
  46. GetObjectResp() {}
  47. GetObjectResp(const GetObjectResp& rhs)
  48. : BaseResp(rhs),
  49. m_x_cos_object_type(rhs.m_x_cos_object_type),
  50. m_x_cos_metas(rhs.m_x_cos_metas) {}
  51. GetObjectResp& operator=(const GetObjectResp& rhs) {
  52. if (&rhs != this) {
  53. BaseResp::operator=(rhs);
  54. m_x_cos_object_type = rhs.m_x_cos_object_type;
  55. m_x_cos_metas = rhs.m_x_cos_metas;
  56. }
  57. return *this;
  58. }
  59. virtual ~GetObjectResp() {}
  60. private:
  61. std::string m_x_cos_object_type;
  62. std::map<std::string, std::string> m_x_cos_metas;
  63. };
  64. class GetObjectByStreamResp : public GetObjectResp {
  65. public:
  66. GetObjectByStreamResp() {}
  67. virtual ~GetObjectByStreamResp() {}
  68. };
  69. class GetObjectByFileResp : public GetObjectResp {
  70. public:
  71. GetObjectByFileResp() {}
  72. virtual ~GetObjectByFileResp() {}
  73. };
  74. class PutObjectResp : virtual public BaseResp {
  75. protected:
  76. PutObjectResp() {}
  77. virtual ~PutObjectResp() {}
  78. public:
  79. /// 获取Object的版本号, 如果Bucket未开启多版本, 返回空字符串
  80. std::string GetVersionId() const { return GetHeader("x-cos-version-id"); }
  81. /// Server端加密使用的算法
  82. std::string GetXCosServerSideEncryption() const {
  83. return GetHeader("x-cos-server-side-encryption");
  84. }
  85. };
  86. class PutObjectByStreamResp : public PutObjectResp {
  87. public:
  88. PutObjectByStreamResp() {}
  89. virtual ~PutObjectByStreamResp() {}
  90. };
  91. class PutObjectByFileResp : public PutObjectResp {
  92. public:
  93. PutObjectByFileResp() {}
  94. virtual ~PutObjectByFileResp() {}
  95. };
  96. class DeleteObjectResp : public BaseResp {
  97. public:
  98. DeleteObjectResp() {}
  99. virtual ~DeleteObjectResp() {}
  100. };
  101. class DeleteObjectsResp : public BaseResp {
  102. public:
  103. DeleteObjectsResp() {}
  104. virtual ~DeleteObjectsResp() {}
  105. std::vector<DeletedInfo> GetDeletedInfos() const { return m_deleted_infos; }
  106. std::vector<ErrorInfo> GetErrorMsgs() const { return m_error_infos; }
  107. virtual bool ParseFromXmlString(const std::string& body);
  108. private:
  109. std::vector<DeletedInfo> m_deleted_infos;
  110. std::vector<ErrorInfo> m_error_infos;
  111. };
  112. class HeadObjectResp : public BaseResp {
  113. public:
  114. HeadObjectResp() {}
  115. virtual ~HeadObjectResp() {}
  116. /// \brief 获取object type, 表示object是否可以被追加上传,枚举值:normal 或者
  117. /// appendable
  118. std::string GetXCosObjectType() const { return m_x_cos_object_type; }
  119. void SetXCosObjectType(const std::string& x_cos_object_type) {
  120. m_x_cos_object_type = x_cos_object_type;
  121. }
  122. /// \brief 获取自定义的元数据
  123. std::map<std::string, std::string> GetXCosMetas() const {
  124. return m_x_cos_metas;
  125. }
  126. /// \brief 获取自定义的元数据
  127. std::string GetXCosMeta(const std::string& key) const {
  128. std::map<std::string, std::string>::const_iterator itr =
  129. m_x_cos_metas.find(key);
  130. if (itr != m_x_cos_metas.end()) {
  131. return itr->second;
  132. }
  133. return "";
  134. }
  135. void SetXCosMeta(const std::string& key, const std::string& value) {
  136. m_x_cos_metas[key] = value;
  137. }
  138. /// \brief 获得 archive 类型对象的当前恢复状态
  139. std::string GetXCosRestore() const { return GetHeader("x-cos-restore"); }
  140. /// \brief Server端加密使用的算法
  141. std::string GetXCosServerSideEncryption() const {
  142. return GetHeader("x-cos-server-side-encryption");
  143. }
  144. void ParseFromHeaders(const std::map<std::string, std::string>& headers);
  145. private:
  146. std::string m_x_cos_object_type;
  147. std::map<std::string, std::string> m_x_cos_metas;
  148. };
  149. class InitMultiUploadResp : public BaseResp {
  150. public:
  151. InitMultiUploadResp() {}
  152. virtual ~InitMultiUploadResp() {}
  153. virtual bool ParseFromXmlString(const std::string& body);
  154. /// \brief 获取uploadId, 用于后续上传
  155. std::string GetUploadId() const { return m_upload_id; }
  156. /// \brief 获取Object的名称
  157. std::string GetKey() const { return m_key; }
  158. /// \brief 分片上传的目标Bucket
  159. std::string GetBucket() const { return m_bucket; }
  160. /// \brief Server端加密使用的算法
  161. std::string GetXCosServerSideEncryption() const {
  162. return GetHeader("x-cos-server-side-encryption");
  163. }
  164. private:
  165. std::string m_bucket;
  166. std::string m_key; // object名称
  167. std::string m_upload_id;
  168. };
  169. class UploadPartDataResp : public BaseResp {
  170. public:
  171. UploadPartDataResp() {}
  172. virtual ~UploadPartDataResp() {}
  173. /// \brief Server端加密使用的算法
  174. std::string GetXCosServerSideEncryption() const {
  175. return GetHeader("x-cos-server-side-encryption");
  176. }
  177. };
  178. class UploadPartCopyDataResp : public BaseResp {
  179. public:
  180. UploadPartCopyDataResp() {}
  181. virtual ~UploadPartCopyDataResp() {}
  182. virtual bool ParseFromXmlString(const std::string& body);
  183. /// \brief 获取返回文件的MD5算法校验值。
  184. /// ETag 的值可以用于检查 Object 的内容是否发生变化。
  185. std::string GetEtag() const { return m_etag; }
  186. /// \brief 返回文件最后修改时间,GMT 格式
  187. std::string GetLastModified() const { return m_last_modified; }
  188. /// \brief Server端加密使用的算法
  189. std::string GetXCosServerSideEncryption() const {
  190. return GetHeader("x-cos-server-side-encryption");
  191. }
  192. private:
  193. std::string m_etag;
  194. std::string m_last_modified;
  195. };
  196. class CompleteMultiUploadResp : public BaseResp {
  197. public:
  198. CompleteMultiUploadResp() {}
  199. virtual ~CompleteMultiUploadResp() {}
  200. virtual bool ParseFromXmlString(const std::string& body);
  201. std::string GetLocation() const { return m_location; }
  202. std::string GetKey() const { return m_key; }
  203. std::string GetBucket() const { return m_bucket; }
  204. std::string GetVersionId() const { return GetHeader("x-cos-version-id"); }
  205. std::string GetEtag() const { return m_etag; }
  206. void SetEtag(const std::string& etag) { m_etag = etag;}
  207. void AddEtagToHeader() { BaseResp::SetEtag(m_etag); }
  208. /// \brief Server端加密使用的算法
  209. std::string GetXCosServerSideEncryption() const {
  210. return GetHeader("x-cos-server-side-encryption");
  211. }
  212. private:
  213. std::string m_location; // Object的外网访问域名
  214. std::string m_bucket;
  215. std::string m_key;
  216. std::string m_etag;
  217. };
  218. class AbortMultiUploadResp : public BaseResp {
  219. public:
  220. AbortMultiUploadResp() {}
  221. virtual ~AbortMultiUploadResp() {}
  222. };
  223. class ListPartsResp : public BaseResp {
  224. public:
  225. ListPartsResp()
  226. : m_bucket(""),
  227. m_encoding_type(""),
  228. m_key(""),
  229. m_upload_id(""),
  230. m_part_number_marker(0),
  231. m_parts(0),
  232. m_next_part_number_marker(0),
  233. m_storage_class(""),
  234. m_max_parts(1000),
  235. m_is_truncated(false) {}
  236. virtual ~ListPartsResp() {}
  237. virtual bool ParseFromXmlString(const std::string& body);
  238. std::string GetBucket() const { return m_bucket; }
  239. std::string GetEncodingType() const { return m_encoding_type; }
  240. std::string GetKey() const { return m_key; }
  241. std::string GetUploadId() const { return m_upload_id; }
  242. Initiator GetInitiator() const { return m_initiator; }
  243. Owner GetOwner() const { return m_owner; }
  244. uint64_t GetPartNumberMarker() const { return m_part_number_marker; }
  245. std::vector<Part> GetParts() const { return m_parts; }
  246. uint64_t GetNextPartNumberMarker() const { return m_next_part_number_marker; }
  247. std::string GetStorageClass() const { return m_storage_class; }
  248. uint64_t GetMaxParts() const { return m_max_parts; }
  249. bool IsTruncated() const { return m_is_truncated; }
  250. private:
  251. std::string m_bucket;
  252. std::string m_encoding_type;
  253. std::string m_key;
  254. std::string m_upload_id;
  255. Initiator m_initiator;
  256. Owner m_owner;
  257. uint64_t m_part_number_marker;
  258. std::vector<Part> m_parts;
  259. uint64_t m_next_part_number_marker;
  260. std::string m_storage_class;
  261. uint64_t m_max_parts;
  262. bool m_is_truncated;
  263. };
  264. class GetObjectACLResp : public BaseResp {
  265. public:
  266. GetObjectACLResp() {}
  267. virtual ~GetObjectACLResp() {}
  268. virtual bool ParseFromXmlString(const std::string& body);
  269. std::string GetOwnerID() const { return m_owner_id; }
  270. std::string GetOwnerDisplayName() const { return m_owner_display_name; }
  271. std::vector<Grant> GetAccessControlList() const { return m_acl; }
  272. private:
  273. std::string m_owner_id;
  274. std::string m_owner_display_name;
  275. std::vector<Grant> m_acl;
  276. };
  277. class PutObjectACLResp : public BaseResp {
  278. public:
  279. PutObjectACLResp() {}
  280. virtual ~PutObjectACLResp() {}
  281. };
  282. class PutObjectTaggingResp : public BaseResp {
  283. public:
  284. PutObjectTaggingResp() {}
  285. virtual ~PutObjectTaggingResp() {}
  286. };
  287. class GetObjectTaggingResp : public BaseResp {
  288. public:
  289. GetObjectTaggingResp() {}
  290. void SetTagSet(std::vector<Tag>& tagset) { m_tagset = tagset; }
  291. std::vector<Tag> GetTagSet() const { return m_tagset; }
  292. //清除tag规则.
  293. void ClearTagSet() {
  294. std::vector<Tag> temp;
  295. m_tagset.swap(temp);
  296. }
  297. /// 添加单个tag.
  298. void AddTag(const Tag& tag) { m_tagset.push_back(tag); }
  299. virtual bool ParseFromXmlString(const std::string& body);
  300. virtual ~GetObjectTaggingResp() {}
  301. private:
  302. std::vector<Tag> m_tagset;
  303. };
  304. class DeleteObjectTaggingResp : public BaseResp {
  305. public:
  306. DeleteObjectTaggingResp() {}
  307. virtual ~DeleteObjectTaggingResp() {}
  308. };
  309. class PutObjectCopyResp : public BaseResp {
  310. public:
  311. PutObjectCopyResp() {}
  312. virtual ~PutObjectCopyResp() {}
  313. virtual bool ParseFromXmlString(const std::string& body);
  314. std::string GetEtag() const { return m_etag; }
  315. std::string GetLastModified() const { return m_last_modified; }
  316. std::string GetVersionId() const { return m_version_id; }
  317. std::string GetCrc64() const { return m_crc64; }
  318. /// Server端加密使用的算法
  319. std::string GetXCosServerSideEncryption() const {
  320. return GetHeader("x-cos-server-side-encryption");
  321. }
  322. private:
  323. std::string m_etag;
  324. std::string m_last_modified;
  325. std::string m_version_id;
  326. std::string m_crc64;
  327. };
  328. class CopyResp : public BaseResp {
  329. public:
  330. CopyResp()
  331. : m_location(""),
  332. m_bucket(""),
  333. m_key(""),
  334. m_etag(""),
  335. m_last_modified(""),
  336. m_version_id(""),
  337. m_resp_tag("") {}
  338. virtual ~CopyResp() {}
  339. void CopyFrom(const PutObjectCopyResp& resp);
  340. void CopyFrom(const CompleteMultiUploadResp& resp);
  341. void Clear() {
  342. m_location = "";
  343. m_bucket = "";
  344. m_key = "";
  345. m_etag = "";
  346. m_last_modified = "";
  347. m_version_id = "";
  348. m_resp_tag = "";
  349. }
  350. std::string GetLocation() const { return m_location; }
  351. std::string GetKey() const { return m_key; }
  352. std::string GetBucket() const { return m_bucket; }
  353. std::string GetEtag() const { return m_etag; }
  354. std::string GetLastModified() const { return m_last_modified; }
  355. std::string GetVersionId() const { return m_version_id; }
  356. std::string GetRespTag() { return m_resp_tag; }
  357. private:
  358. std::string m_location; // Object的外网访问域名
  359. std::string m_bucket;
  360. std::string m_key;
  361. std::string m_etag;
  362. std::string m_last_modified;
  363. std::string m_version_id;
  364. std::string m_resp_tag; // 用于区分是哪一种response
  365. };
  366. class PostObjectRestoreResp : public BaseResp {
  367. public:
  368. PostObjectRestoreResp() {}
  369. ~PostObjectRestoreResp() {}
  370. };
  371. class OptionsObjectResp : public BaseResp {
  372. public:
  373. OptionsObjectResp() {}
  374. ~OptionsObjectResp() {}
  375. /// \brief 获取模拟跨域访问的请求来源域名,当来源不允许的时候,此Header不返回
  376. std::string GetAccessControAllowOrigin() const {
  377. return GetHeader("Access-Control-Allow-Origin");
  378. }
  379. /// \brief 获取模拟跨域访问的请求 HTTP
  380. /// 方法,当请求方法不允许的时候,此Header不返回
  381. std::string GetAccessControlAllowMethods() const {
  382. return GetHeader("Access-Control-Allow-Methods");
  383. }
  384. /// \brief
  385. /// 获取模拟跨域访问的请求头部,当模拟任何请求头部不允许的时候,此Header不返回该请求头部
  386. std::string GetAccessControlAllowHeaders() const {
  387. return GetHeader("Access-Control-Allow-Headers");
  388. }
  389. /// \brief 获取模拟跨域访问的请求 HTTP
  390. /// 方法,当请求方法不允许的时候,此Header不返回
  391. std::string GetAccessControlExposeHeaders() const {
  392. return GetHeader("Access-Control-Expose-Headers");
  393. }
  394. /// \brief 获取OPTIONS请求得到结果的有效期
  395. std::string GetAccessControlMaxAge() const {
  396. return GetHeader("Access-Control-Max-Age");
  397. }
  398. };
  399. class SelectObjectContentResp : public BaseResp {
  400. public:
  401. SelectObjectContentResp() { resp_data.reserve(10); }
  402. ~SelectObjectContentResp() {}
  403. /// \brief 将响应结果写入本地文件
  404. int WriteResultToLocalFile(const std::string& file);
  405. bool ParseFromXmlString(const std::string& body);
  406. // bool ParseFromStringStream(const std::ostringstream& os);
  407. /// \brief 打印最终结果至终端
  408. void PrintResult() const;
  409. private:
  410. // void ParseStatsEvent(const std::string& stat_str);
  411. // void ParseProgressEvent(const std::string& prog_str);
  412. std::vector<SelectMessage> resp_data;
  413. std::string error_message;
  414. std::string error_code;
  415. };
  416. class AppendObjectResp : public PutObjectByStreamResp {
  417. public:
  418. AppendObjectResp() {}
  419. ~AppendObjectResp() {}
  420. /// \brief 获取下一次追加操作的起始点,单位:字节
  421. std::string GetNextPosition() const {
  422. return GetHeader(kRespHeaderXCosNextAppendPosition);
  423. }
  424. /// \brief 获取服务端返回的本次append内容的md5
  425. std::string GetXCosContentSha1() const {
  426. return GetHeader(kRespHeaderXCosContentSha1);
  427. }
  428. };
  429. /// \brief: 创建直播通道的响应
  430. class PutLiveChannelResp : public BaseResp {
  431. public:
  432. PutLiveChannelResp() {}
  433. virtual ~PutLiveChannelResp() {}
  434. virtual bool ParseFromXmlString(const std::string& body);
  435. const std::string GetPublishUrl() const { return m_publish_url; }
  436. std::string& GetPublishUrl() { return m_publish_url; }
  437. std::string GetPlayUrl() const { return m_play_url; }
  438. private:
  439. std::string m_publish_url; // 推流url
  440. std::string m_play_url; // 观流url
  441. };
  442. /// \brief: 启用或者禁用直播通道的响应
  443. class PutLiveChannelSwitchResp : public BaseResp {
  444. public:
  445. PutLiveChannelSwitchResp() {}
  446. virtual ~PutLiveChannelSwitchResp() {}
  447. };
  448. /// \brief: 获取直播通道配置的响应
  449. class GetLiveChannelResp : public BaseResp {
  450. public:
  451. GetLiveChannelResp() {}
  452. virtual ~GetLiveChannelResp() {}
  453. virtual bool ParseFromXmlString(const std::string& body);
  454. const LiveChannelConfiguration& GetLiveChannelConf() const {
  455. return m_chan_conf;
  456. }
  457. private:
  458. LiveChannelConfiguration m_chan_conf;
  459. };
  460. /// \brief: 获取直播通道推流历史的响应
  461. class GetLiveChannelHistoryResp : public BaseResp {
  462. public:
  463. GetLiveChannelHistoryResp() {}
  464. virtual ~GetLiveChannelHistoryResp() {}
  465. virtual bool ParseFromXmlString(const std::string& body);
  466. const std::vector<LiveRecord>& GetChanHistory() const { return m_history; }
  467. private:
  468. std::vector<LiveRecord> m_history;
  469. };
  470. /// \brief: 获取直播通道推流状态的响应
  471. class GetLiveChannelStatusResp : public BaseResp {
  472. public:
  473. GetLiveChannelStatusResp() {}
  474. virtual ~GetLiveChannelStatusResp() {}
  475. virtual bool ParseFromXmlString(const std::string& body);
  476. const LiveChannelStatus& GetLiveChannelStatus() const {
  477. return m_livechan_status;
  478. }
  479. private:
  480. LiveChannelStatus m_livechan_status;
  481. };
  482. /// \brief: 删除直播通道的响应
  483. class DeleteLiveChannelResp : public BaseResp {
  484. public:
  485. DeleteLiveChannelResp() {}
  486. virtual ~DeleteLiveChannelResp() {}
  487. };
  488. /// \brief: 查询指定通道在指定时间段推流生成的播放列表的响应
  489. class GetLiveChannelVodPlaylistResp : public BaseResp {
  490. public:
  491. GetLiveChannelVodPlaylistResp() {}
  492. virtual ~GetLiveChannelVodPlaylistResp() {}
  493. int WriteResultToFile(const std::string& file);
  494. };
  495. /// \brief: 为指定通道生成一个可供点播例用的播放列表的响应
  496. class PostLiveChannelVodPlaylistResp : public BaseResp {
  497. public:
  498. PostLiveChannelVodPlaylistResp() {}
  499. virtual ~PostLiveChannelVodPlaylistResp() {}
  500. };
  501. /* Multithread接口 */
  502. class MultiPutObjectResp : public BaseResp {
  503. public:
  504. MultiPutObjectResp() {}
  505. virtual ~MultiPutObjectResp() {}
  506. virtual bool ParseFromXmlString(const std::string& body);
  507. std::string GetRespTag() { return m_resp_tag; }
  508. std::string GetLocation() const { return m_location; }
  509. std::string GetKey() const { return m_key; }
  510. std::string GetBucket() const { return m_bucket; }
  511. void CopyFrom(const InitMultiUploadResp& resp);
  512. void CopyFrom(const UploadPartDataResp& resp);
  513. void CopyFrom(const CompleteMultiUploadResp& resp);
  514. /// \brief Server端加密使用的算法
  515. std::string GetXCosServerSideEncryption() const {
  516. return GetHeader("x-cos-server-side-encryption");
  517. }
  518. private:
  519. std::string m_location; // Object的外网访问域名
  520. std::string m_bucket;
  521. std::string m_key;
  522. std::string m_upload_id;
  523. // FIXME(sevenyou) 先这么搞吧
  524. std::string m_resp_tag; // 用于区分是哪一种response
  525. };
  526. class MultiGetObjectResp : public GetObjectByFileResp {
  527. public:
  528. MultiGetObjectResp() {}
  529. ~MultiGetObjectResp() {}
  530. };
  531. class PutObjectResumableSingleSyncResp : public GetObjectByFileResp {
  532. public:
  533. PutObjectResumableSingleSyncResp() {}
  534. virtual ~PutObjectResumableSingleSyncResp() {}
  535. std::string GetRespTag() { return m_resp_tag; }
  536. std::string GetLocation() const { return m_location; }
  537. std::string GetKey() const { return m_key; }
  538. std::string GetBucket() const { return m_bucket; }
  539. void CopyFrom(const InitMultiUploadResp& resp);
  540. void CopyFrom(const PutObjectByFileResp& resp);
  541. void CopyFrom(const CompleteMultiUploadResp& resp);
  542. /// \brief Server端加密使用的算法
  543. std::string GetXCosServerSideEncryption() const {
  544. return GetHeader("x-cos-server-side-encryption");
  545. }
  546. private:
  547. std::string m_location; // Object的外网访问域名
  548. std::string m_bucket;
  549. std::string m_key;
  550. std::string m_upload_id;
  551. // FIXME(sevenyou) 先这么搞吧
  552. std::string m_resp_tag; // 用于区分是哪一种response
  553. };
  554. /* Async接口 */
  555. //typedef PutObjectByFileResp PutObjectAsyncResp;
  556. //typedef PutObjectByFileResp MultiPutObjectAsyncResp;
  557. //typedef GetObjectByFileResp GetObjectAsyncResp;
  558. //typedef GetObjectByFileResp MultiGetObjectAsyncResp;
  559. class AsyncResp : public BaseResp {
  560. public:
  561. AsyncResp() {}
  562. virtual ~AsyncResp() {}
  563. };
  564. /* 批量及目录操作接口 */
  565. class PutObjectsByDirectoryResp {
  566. public:
  567. PutObjectsByDirectoryResp() {}
  568. virtual ~PutObjectsByDirectoryResp() {}
  569. public:
  570. class PutResp {
  571. public:
  572. PutResp() {}
  573. virtual ~PutResp() {}
  574. std::string m_file_name; // 本地文件名
  575. std::string m_object_name; // 对象名
  576. BaseResp m_cos_resp; // cos返回的响应
  577. };
  578. // 成功上传的对象
  579. std::vector<PutResp> m_succ_put_objs;
  580. };
  581. class PutDirectoryResp : public PutObjectResp {
  582. public:
  583. PutDirectoryResp() {}
  584. virtual ~PutDirectoryResp() {}
  585. };
  586. class MoveObjectResp {
  587. public:
  588. MoveObjectResp() {}
  589. virtual ~MoveObjectResp() {}
  590. };
  591. class DeleteObjectsByPrefixResp {
  592. public:
  593. DeleteObjectsByPrefixResp() {}
  594. virtual ~DeleteObjectsByPrefixResp() {}
  595. std::vector<std::string> m_succ_del_objs; // 成功删除的对象
  596. };
  597. } // namespace qcloud_cos
  598. #endif // OBJECT_RESP_H