OssClient.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /*
  2. * Copyright 2009-2017 Alibaba Cloud All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #pragma once
  17. #include <alibabacloud/oss/Export.h>
  18. #include <alibabacloud/oss/client/ClientConfiguration.h>
  19. #include <alibabacloud/oss/auth/CredentialsProvider.h>
  20. #include <alibabacloud/oss/OssFwd.h>
  21. #include <alibabacloud/oss/client/AsyncCallerContext.h>
  22. #include <future>
  23. #include <ctime>
  24. namespace AlibabaCloud
  25. {
  26. namespace OSS
  27. {
  28. /*Global Init/Deinit*/
  29. void ALIBABACLOUD_OSS_EXPORT InitializeSdk();
  30. bool ALIBABACLOUD_OSS_EXPORT IsSdkInitialized();
  31. void ALIBABACLOUD_OSS_EXPORT ShutdownSdk();
  32. /*Log*/
  33. void ALIBABACLOUD_OSS_EXPORT SetLogLevel(LogLevel level);
  34. void ALIBABACLOUD_OSS_EXPORT SetLogCallback(LogCallback callback);
  35. /*Utils*/
  36. std::string ALIBABACLOUD_OSS_EXPORT ComputeContentMD5(const char *data, size_t size);
  37. std::string ALIBABACLOUD_OSS_EXPORT ComputeContentMD5(std::istream& stream);
  38. std::string ALIBABACLOUD_OSS_EXPORT ComputeContentETag(const char* data, size_t size);
  39. std::string ALIBABACLOUD_OSS_EXPORT ComputeContentETag(std::istream& stream);
  40. std::string ALIBABACLOUD_OSS_EXPORT UrlEncode(const std::string& src);
  41. std::string ALIBABACLOUD_OSS_EXPORT UrlDecode(const std::string& src);
  42. std::string ALIBABACLOUD_OSS_EXPORT Base64Encode(const std::string& src);
  43. std::string ALIBABACLOUD_OSS_EXPORT Base64Encode(const char* src, int len);
  44. std::string ALIBABACLOUD_OSS_EXPORT Base64EncodeUrlSafe(const std::string& src);
  45. std::string ALIBABACLOUD_OSS_EXPORT Base64EncodeUrlSafe(const char* src, int len);
  46. std::string ALIBABACLOUD_OSS_EXPORT ToGmtTime(std::time_t& t);
  47. std::string ALIBABACLOUD_OSS_EXPORT ToUtcTime(std::time_t& t);
  48. std::time_t ALIBABACLOUD_OSS_EXPORT UtcToUnixTime(const std::string& t);
  49. uint64_t ALIBABACLOUD_OSS_EXPORT ComputeCRC64(uint64_t crc, void* buf, size_t len);
  50. uint64_t ALIBABACLOUD_OSS_EXPORT CombineCRC64(uint64_t crc1, uint64_t crc2, uintmax_t len2);
  51. /*Aysnc APIs*/
  52. class OssClient;
  53. using ListObjectAsyncHandler = std::function<void(const AlibabaCloud::OSS::OssClient*, const ListObjectsRequest&, const ListObjectOutcome&, const std::shared_ptr<const AsyncCallerContext>&)>;
  54. using GetObjectAsyncHandler = std::function<void(const AlibabaCloud::OSS::OssClient*, const GetObjectRequest&, const GetObjectOutcome&, const std::shared_ptr<const AsyncCallerContext>&)>;
  55. using PutObjectAsyncHandler = std::function<void(const AlibabaCloud::OSS::OssClient*, const PutObjectRequest&, const PutObjectOutcome&, const std::shared_ptr<const AsyncCallerContext>&)>;
  56. using UploadPartAsyncHandler = std::function<void(const AlibabaCloud::OSS::OssClient*, const UploadPartRequest&, const PutObjectOutcome&, const std::shared_ptr<const AsyncCallerContext>&)>;
  57. using UploadPartCopyAsyncHandler = std::function<void(const AlibabaCloud::OSS::OssClient*, const UploadPartCopyRequest&, const UploadPartCopyOutcome&, const std::shared_ptr<const AsyncCallerContext>&)>;
  58. /*Callable*/
  59. using ListObjectOutcomeCallable = std::future<ListObjectOutcome>;
  60. using GetObjectOutcomeCallable = std::future<GetObjectOutcome>;
  61. using PutObjectOutcomeCallable = std::future<PutObjectOutcome>;
  62. using UploadPartCopyOutcomeCallable = std::future<UploadPartCopyOutcome>;
  63. class OssClientImpl;
  64. class ALIBABACLOUD_OSS_EXPORT OssClient
  65. {
  66. public:
  67. OssClient(const std::string& endpoint, const std::string& accessKeyId, const std::string& accessKeySecret,
  68. const ClientConfiguration& configuration);
  69. OssClient(const std::string& endpoint, const std::string& accessKeyId, const std::string& accessKeySecret, const std::string& securityToken,
  70. const ClientConfiguration& configuration);
  71. OssClient(const std::string& endpoint, const Credentials& credentials, const ClientConfiguration& configuration);
  72. OssClient(const std::string& endpoint, const std::shared_ptr<CredentialsProvider>& credentialsProvider, const ClientConfiguration& configuration);
  73. ~OssClient();
  74. /*Service*/
  75. ListBucketsOutcome ListBuckets() const;
  76. ListBucketsOutcome ListBuckets(const ListBucketsRequest& request) const;
  77. /*Bucket*/
  78. CreateBucketOutcome CreateBucket(const std::string& bucket, StorageClass storageClass = StorageClass::Standard) const;
  79. CreateBucketOutcome CreateBucket(const std::string& bucket, StorageClass storageClass, CannedAccessControlList acl) const;
  80. CreateBucketOutcome CreateBucket(const CreateBucketRequest& request) const;
  81. ListObjectOutcome ListObjects(const std::string& bucket) const;
  82. ListObjectOutcome ListObjects(const std::string& bucket, const std::string& prefix) const;
  83. ListObjectOutcome ListObjects(const ListObjectsRequest& request) const;
  84. ListObjectVersionsOutcome ListObjectVersions(const std::string& bucket) const;
  85. ListObjectVersionsOutcome ListObjectVersions(const std::string& bucket, const std::string& prefix) const;
  86. ListObjectVersionsOutcome ListObjectVersions(const ListObjectVersionsRequest& request) const;
  87. VoidOutcome SetBucketAcl(const std::string& bucket, CannedAccessControlList acl) const;
  88. VoidOutcome SetBucketAcl(const SetBucketAclRequest& request) const;
  89. VoidOutcome SetBucketLogging(const std::string& bucket, const std::string& targetBucket, const std::string& targetPrefix) const;
  90. VoidOutcome SetBucketLogging(const SetBucketLoggingRequest& request) const;
  91. VoidOutcome SetBucketWebsite(const std::string& bucket, const std::string& indexDocument) const;
  92. VoidOutcome SetBucketWebsite(const std::string& bucket, const std::string& indexDocument, const std::string& errorDocument) const;
  93. VoidOutcome SetBucketWebsite(const SetBucketWebsiteRequest& request) const;
  94. VoidOutcome SetBucketReferer(const std::string& bucket, const RefererList& refererList, bool allowEmptyReferer) const;
  95. VoidOutcome SetBucketReferer(const SetBucketRefererRequest& request) const;
  96. VoidOutcome SetBucketLifecycle(const SetBucketLifecycleRequest& request) const;
  97. VoidOutcome SetBucketCors(const std::string& bucket, const CORSRuleList& rules) const;
  98. VoidOutcome SetBucketCors(const SetBucketCorsRequest& request) const;
  99. VoidOutcome SetBucketStorageCapacity(const std::string& bucket, int64_t storageCapacity) const;
  100. VoidOutcome SetBucketStorageCapacity(const SetBucketStorageCapacityRequest& request) const;
  101. VoidOutcome SetBucketPolicy(const SetBucketPolicyRequest& request) const;
  102. VoidOutcome SetBucketRequestPayment(const SetBucketRequestPaymentRequest& request) const;
  103. VoidOutcome SetBucketEncryption(const SetBucketEncryptionRequest& request) const;
  104. VoidOutcome SetBucketTagging(const SetBucketTaggingRequest& request) const;
  105. VoidOutcome SetBucketQosInfo(const SetBucketQosInfoRequest& request) const;
  106. VoidOutcome SetBucketVersioning(const SetBucketVersioningRequest& request) const;
  107. VoidOutcome DeleteBucket(const std::string& bucket) const;
  108. VoidOutcome DeleteBucket(const DeleteBucketRequest& request) const;
  109. VoidOutcome DeleteBucketLogging(const std::string& bucket) const;
  110. VoidOutcome DeleteBucketLogging(const DeleteBucketLoggingRequest& request) const;
  111. VoidOutcome DeleteBucketPolicy(const DeleteBucketPolicyRequest& request) const;
  112. VoidOutcome DeleteBucketWebsite(const std::string& bucket) const;
  113. VoidOutcome DeleteBucketWebsite(const DeleteBucketWebsiteRequest& request) const;
  114. VoidOutcome DeleteBucketLifecycle(const std::string& bucket) const;
  115. VoidOutcome DeleteBucketLifecycle(const DeleteBucketLifecycleRequest& request) const;
  116. VoidOutcome DeleteBucketCors(const std::string& bucket) const;
  117. VoidOutcome DeleteBucketCors(const DeleteBucketCorsRequest& request) const;
  118. VoidOutcome DeleteBucketEncryption(const DeleteBucketEncryptionRequest& request) const;
  119. VoidOutcome DeleteBucketTagging(const DeleteBucketTaggingRequest& request) const;
  120. VoidOutcome DeleteBucketQosInfo(const DeleteBucketQosInfoRequest& request) const;
  121. GetBucketAclOutcome GetBucketAcl(const std::string& bucket) const;
  122. GetBucketAclOutcome GetBucketAcl(const GetBucketAclRequest& request) const;
  123. GetBucketLocationOutcome GetBucketLocation(const std::string& bucket) const;
  124. GetBucketLocationOutcome GetBucketLocation(const GetBucketLocationRequest& request) const;
  125. GetBucketInfoOutcome GetBucketInfo(const std::string& bucket) const;
  126. GetBucketInfoOutcome GetBucketInfo(const GetBucketInfoRequest& request) const;
  127. GetBucketLoggingOutcome GetBucketLogging(const std::string& bucket) const;
  128. GetBucketLoggingOutcome GetBucketLogging(const GetBucketLoggingRequest& request) const;
  129. GetBucketWebsiteOutcome GetBucketWebsite(const std::string& bucket) const;
  130. GetBucketWebsiteOutcome GetBucketWebsite(const GetBucketWebsiteRequest& request) const;
  131. GetBucketRefererOutcome GetBucketReferer(const std::string& bucket) const;
  132. GetBucketRefererOutcome GetBucketReferer(const GetBucketRefererRequest& request) const;
  133. GetBucketLifecycleOutcome GetBucketLifecycle(const std::string& bucket) const;
  134. GetBucketLifecycleOutcome GetBucketLifecycle(const GetBucketLifecycleRequest& request) const;
  135. GetBucketStatOutcome GetBucketStat(const std::string& bucket) const;
  136. GetBucketStatOutcome GetBucketStat(const GetBucketStatRequest& request) const;
  137. GetBucketCorsOutcome GetBucketCors(const std::string& bucket) const;
  138. GetBucketCorsOutcome GetBucketCors(const GetBucketCorsRequest& request) const;
  139. GetBucketStorageCapacityOutcome GetBucketStorageCapacity(const std::string& bucket) const;
  140. GetBucketStorageCapacityOutcome GetBucketStorageCapacity(const GetBucketStorageCapacityRequest& request) const;
  141. GetBucketPolicyOutcome GetBucketPolicy(const GetBucketPolicyRequest& request) const;
  142. GetBucketPaymentOutcome GetBucketRequestPayment(const GetBucketRequestPaymentRequest& request) const;
  143. GetBucketEncryptionOutcome GetBucketEncryption(const GetBucketEncryptionRequest& request) const;
  144. GetBucketTaggingOutcome GetBucketTagging(const GetBucketTaggingRequest& request) const;
  145. GetBucketQosInfoOutcome GetBucketQosInfo(const GetBucketQosInfoRequest& request) const;
  146. GetUserQosInfoOutcome GetUserQosInfo(const GetUserQosInfoRequest& request) const;
  147. GetBucketVersioningOutcome GetBucketVersioning(const GetBucketVersioningRequest& request) const;
  148. /*Object*/
  149. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key) const;
  150. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content) const;
  151. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key, const std::string& fileToSave) const;
  152. GetObjectOutcome GetObject(const GetObjectRequest& request) const;
  153. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content) const;
  154. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::string& fileToUpload) const;
  155. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content, const ObjectMetaData& meta) const;
  156. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::string& fileToUpload, const ObjectMetaData& meta) const;
  157. PutObjectOutcome PutObject(const PutObjectRequest& request) const;
  158. DeleteObjectOutcome DeleteObject(const std::string& bucket, const std::string& key) const;
  159. DeleteObjectOutcome DeleteObject(const DeleteObjectRequest& request) const;
  160. DeleteObjecstOutcome DeleteObjects(const std::string bucket, const DeletedKeyList &keyList) const;
  161. DeleteObjecstOutcome DeleteObjects(const DeleteObjectsRequest& request) const;
  162. DeleteObjecVersionstOutcome DeleteObjectVersions(const std::string bucket, const ObjectIdentifierList &objectList) const;
  163. DeleteObjecVersionstOutcome DeleteObjectVersions(const DeleteObjectVersionsRequest& request) const;
  164. ObjectMetaDataOutcome HeadObject(const std::string& bucket, const std::string& key) const;
  165. ObjectMetaDataOutcome HeadObject(const HeadObjectRequest& request) const;
  166. ObjectMetaDataOutcome GetObjectMeta(const std::string& bucket, const std::string& key) const;
  167. ObjectMetaDataOutcome GetObjectMeta(const GetObjectMetaRequest& request) const;
  168. AppendObjectOutcome AppendObject(const AppendObjectRequest& request) const;
  169. CopyObjectOutcome CopyObject(const CopyObjectRequest& request) const;
  170. RestoreObjectOutcome RestoreObject(const std::string& bucket, const std::string& key) const;
  171. RestoreObjectOutcome RestoreObject(const RestoreObjectRequest& request) const;
  172. SetObjectAclOutcome SetObjectAcl(const SetObjectAclRequest& request) const;
  173. GetObjectAclOutcome GetObjectAcl(const GetObjectAclRequest& request) const;
  174. CreateSymlinkOutcome CreateSymlink(const CreateSymlinkRequest& request) const;
  175. GetSymlinkOutcome GetSymlink(const GetSymlinkRequest& request) const;
  176. GetObjectOutcome ProcessObject(const ProcessObjectRequest& request) const;
  177. GetObjectOutcome SelectObject(const SelectObjectRequest& request) const;
  178. CreateSelectObjectMetaOutcome CreateSelectObjectMeta(const CreateSelectObjectMetaRequest& request) const;
  179. SetObjectTaggingOutcome SetObjectTagging(const SetObjectTaggingRequest& request) const;
  180. DeleteObjectTaggingOutcome DeleteObjectTagging(const DeleteObjectTaggingRequest& request) const;
  181. GetObjectTaggingOutcome GetObjectTagging(const GetObjectTaggingRequest& request) const;
  182. /*MultipartUpload*/
  183. InitiateMultipartUploadOutcome InitiateMultipartUpload(const InitiateMultipartUploadRequest& request) const;
  184. PutObjectOutcome UploadPart(const UploadPartRequest& request) const;
  185. UploadPartCopyOutcome UploadPartCopy(const UploadPartCopyRequest& request) const;
  186. CompleteMultipartUploadOutcome CompleteMultipartUpload(const CompleteMultipartUploadRequest& request) const;
  187. VoidOutcome AbortMultipartUpload(const AbortMultipartUploadRequest& request) const;
  188. ListMultipartUploadsOutcome ListMultipartUploads(const ListMultipartUploadsRequest& request) const;
  189. ListPartsOutcome ListParts(const ListPartsRequest& request) const;
  190. /*Generate URL*/
  191. StringOutcome GeneratePresignedUrl(const GeneratePresignedUrlRequest& request) const;
  192. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key) const;
  193. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key, int64_t expires) const;
  194. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key, int64_t expires, Http::Method method) const;
  195. GetObjectOutcome GetObjectByUrl(const GetObjectByUrlRequest& request) const;
  196. GetObjectOutcome GetObjectByUrl(const std::string& url) const;
  197. GetObjectOutcome GetObjectByUrl(const std::string& url, const std::string& file) const;
  198. PutObjectOutcome PutObjectByUrl(const PutObjectByUrlRequest& request) const;
  199. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::string& file) const;
  200. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::string& file, const ObjectMetaData& metaData) const;
  201. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::shared_ptr<std::iostream>& content) const;
  202. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::shared_ptr<std::iostream>& content, const ObjectMetaData& metaData) const;
  203. /*Generate Post Policy*/
  204. /*Resumable Operation*/
  205. PutObjectOutcome ResumableUploadObject(const UploadObjectRequest& request) const;
  206. CopyObjectOutcome ResumableCopyObject(const MultiCopyObjectRequest& request) const;
  207. GetObjectOutcome ResumableDownloadObject(const DownloadObjectRequest& request) const;
  208. /*Live Channel*/
  209. VoidOutcome PutLiveChannelStatus(const PutLiveChannelStatusRequest& request) const;
  210. PutLiveChannelOutcome PutLiveChannel(const PutLiveChannelRequest& request) const;
  211. VoidOutcome PostVodPlaylist(const PostVodPlaylistRequest& request) const;
  212. GetVodPlaylistOutcome GetVodPlaylist(const GetVodPlaylistRequest& request) const;
  213. GetLiveChannelStatOutcome GetLiveChannelStat(const GetLiveChannelStatRequest& request) const;
  214. GetLiveChannelInfoOutcome GetLiveChannelInfo(const GetLiveChannelInfoRequest& request) const;
  215. GetLiveChannelHistoryOutcome GetLiveChannelHistory(const GetLiveChannelHistoryRequest& request) const;
  216. ListLiveChannelOutcome ListLiveChannel(const ListLiveChannelRequest& request) const;
  217. VoidOutcome DeleteLiveChannel(const DeleteLiveChannelRequest& request) const;
  218. StringOutcome GenerateRTMPSignedUrl(const GenerateRTMPSignedUrlRequest& request) const;
  219. /*Aysnc APIs*/
  220. void ListObjectsAsync(const ListObjectsRequest& request, const ListObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  221. void GetObjectAsync(const GetObjectRequest& request, const GetObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  222. void PutObjectAsync(const PutObjectRequest& request, const PutObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  223. void UploadPartAsync(const UploadPartRequest& request, const UploadPartAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  224. void UploadPartCopyAsync(const UploadPartCopyRequest& request, const UploadPartCopyAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  225. /*Callable APIs*/
  226. ListObjectOutcomeCallable ListObjectsCallable(const ListObjectsRequest& request) const;
  227. GetObjectOutcomeCallable GetObjectCallable(const GetObjectRequest& request) const;
  228. PutObjectOutcomeCallable PutObjectCallable(const PutObjectRequest& request) const;
  229. PutObjectOutcomeCallable UploadPartCallable(const UploadPartRequest& request) const;
  230. UploadPartCopyOutcomeCallable UploadPartCopyCallable(const UploadPartCopyRequest& request) const;
  231. /*Extended APIs*/
  232. bool DoesBucketExist(const std::string& bucket) const;
  233. bool DoesObjectExist(const std::string& bucket, const std::string& key) const;
  234. CopyObjectOutcome ModifyObjectMeta(const std::string& bucket, const std::string& key, const ObjectMetaData& meta);
  235. /*Requests control*/
  236. void DisableRequest();
  237. void EnableRequest();
  238. private:
  239. std::shared_ptr<OssClientImpl> client_;
  240. };
  241. }
  242. }