OssClient.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. virtual ~OssClient();
  74. #if !defined(OSS_DISABLE_BUCKET)
  75. /*Service*/
  76. ListBucketsOutcome ListBuckets() const;
  77. ListBucketsOutcome ListBuckets(const ListBucketsRequest& request) const;
  78. /*Bucket*/
  79. CreateBucketOutcome CreateBucket(const std::string& bucket, StorageClass storageClass = StorageClass::Standard) const;
  80. CreateBucketOutcome CreateBucket(const std::string& bucket, StorageClass storageClass, CannedAccessControlList acl) const;
  81. CreateBucketOutcome CreateBucket(const CreateBucketRequest& request) const;
  82. ListBucketInventoryConfigurationsOutcome ListBucketInventoryConfigurations(const ListBucketInventoryConfigurationsRequest& request) const;
  83. VoidOutcome SetBucketAcl(const std::string& bucket, CannedAccessControlList acl) const;
  84. VoidOutcome SetBucketAcl(const SetBucketAclRequest& request) const;
  85. VoidOutcome SetBucketLogging(const std::string& bucket, const std::string& targetBucket, const std::string& targetPrefix) const;
  86. VoidOutcome SetBucketLogging(const SetBucketLoggingRequest& request) const;
  87. VoidOutcome SetBucketWebsite(const std::string& bucket, const std::string& indexDocument) const;
  88. VoidOutcome SetBucketWebsite(const std::string& bucket, const std::string& indexDocument, const std::string& errorDocument) const;
  89. VoidOutcome SetBucketWebsite(const SetBucketWebsiteRequest& request) const;
  90. VoidOutcome SetBucketReferer(const std::string& bucket, const RefererList& refererList, bool allowEmptyReferer) const;
  91. VoidOutcome SetBucketReferer(const SetBucketRefererRequest& request) const;
  92. VoidOutcome SetBucketLifecycle(const SetBucketLifecycleRequest& request) const;
  93. VoidOutcome SetBucketCors(const std::string& bucket, const CORSRuleList& rules) const;
  94. VoidOutcome SetBucketCors(const SetBucketCorsRequest& request) const;
  95. VoidOutcome SetBucketStorageCapacity(const std::string& bucket, int64_t storageCapacity) const;
  96. VoidOutcome SetBucketStorageCapacity(const SetBucketStorageCapacityRequest& request) const;
  97. VoidOutcome SetBucketPolicy(const SetBucketPolicyRequest& request) const;
  98. VoidOutcome SetBucketRequestPayment(const SetBucketRequestPaymentRequest& request) const;
  99. VoidOutcome SetBucketEncryption(const SetBucketEncryptionRequest& request) const;
  100. VoidOutcome SetBucketTagging(const SetBucketTaggingRequest& request) const;
  101. VoidOutcome SetBucketQosInfo(const SetBucketQosInfoRequest& request) const;
  102. VoidOutcome SetBucketVersioning(const SetBucketVersioningRequest& request) const;
  103. VoidOutcome SetBucketInventoryConfiguration(const SetBucketInventoryConfigurationRequest& request) const;
  104. VoidOutcome DeleteBucket(const std::string& bucket) const;
  105. VoidOutcome DeleteBucket(const DeleteBucketRequest& request) const;
  106. VoidOutcome DeleteBucketLogging(const std::string& bucket) const;
  107. VoidOutcome DeleteBucketLogging(const DeleteBucketLoggingRequest& request) const;
  108. VoidOutcome DeleteBucketPolicy(const DeleteBucketPolicyRequest& request) const;
  109. VoidOutcome DeleteBucketWebsite(const std::string& bucket) const;
  110. VoidOutcome DeleteBucketWebsite(const DeleteBucketWebsiteRequest& request) const;
  111. VoidOutcome DeleteBucketLifecycle(const std::string& bucket) const;
  112. VoidOutcome DeleteBucketLifecycle(const DeleteBucketLifecycleRequest& request) const;
  113. VoidOutcome DeleteBucketCors(const std::string& bucket) const;
  114. VoidOutcome DeleteBucketCors(const DeleteBucketCorsRequest& request) const;
  115. VoidOutcome DeleteBucketEncryption(const DeleteBucketEncryptionRequest& request) const;
  116. VoidOutcome DeleteBucketTagging(const DeleteBucketTaggingRequest& request) const;
  117. VoidOutcome DeleteBucketQosInfo(const DeleteBucketQosInfoRequest& request) const;
  118. VoidOutcome DeleteBucketInventoryConfiguration(const DeleteBucketInventoryConfigurationRequest& request) const;
  119. GetBucketAclOutcome GetBucketAcl(const std::string& bucket) const;
  120. GetBucketAclOutcome GetBucketAcl(const GetBucketAclRequest& request) const;
  121. GetBucketLocationOutcome GetBucketLocation(const std::string& bucket) const;
  122. GetBucketLocationOutcome GetBucketLocation(const GetBucketLocationRequest& request) const;
  123. GetBucketInfoOutcome GetBucketInfo(const std::string& bucket) const;
  124. GetBucketInfoOutcome GetBucketInfo(const GetBucketInfoRequest& request) const;
  125. GetBucketLoggingOutcome GetBucketLogging(const std::string& bucket) const;
  126. GetBucketLoggingOutcome GetBucketLogging(const GetBucketLoggingRequest& request) const;
  127. GetBucketWebsiteOutcome GetBucketWebsite(const std::string& bucket) const;
  128. GetBucketWebsiteOutcome GetBucketWebsite(const GetBucketWebsiteRequest& request) const;
  129. GetBucketRefererOutcome GetBucketReferer(const std::string& bucket) const;
  130. GetBucketRefererOutcome GetBucketReferer(const GetBucketRefererRequest& request) const;
  131. GetBucketLifecycleOutcome GetBucketLifecycle(const std::string& bucket) const;
  132. GetBucketLifecycleOutcome GetBucketLifecycle(const GetBucketLifecycleRequest& request) const;
  133. GetBucketStatOutcome GetBucketStat(const std::string& bucket) const;
  134. GetBucketStatOutcome GetBucketStat(const GetBucketStatRequest& request) const;
  135. GetBucketCorsOutcome GetBucketCors(const std::string& bucket) const;
  136. GetBucketCorsOutcome GetBucketCors(const GetBucketCorsRequest& request) const;
  137. GetBucketStorageCapacityOutcome GetBucketStorageCapacity(const std::string& bucket) const;
  138. GetBucketStorageCapacityOutcome GetBucketStorageCapacity(const GetBucketStorageCapacityRequest& request) const;
  139. GetBucketPolicyOutcome GetBucketPolicy(const GetBucketPolicyRequest& request) const;
  140. GetBucketPaymentOutcome GetBucketRequestPayment(const GetBucketRequestPaymentRequest& request) const;
  141. GetBucketEncryptionOutcome GetBucketEncryption(const GetBucketEncryptionRequest& request) const;
  142. GetBucketTaggingOutcome GetBucketTagging(const GetBucketTaggingRequest& request) const;
  143. GetBucketQosInfoOutcome GetBucketQosInfo(const GetBucketQosInfoRequest& request) const;
  144. GetUserQosInfoOutcome GetUserQosInfo(const GetUserQosInfoRequest& request) const;
  145. GetBucketVersioningOutcome GetBucketVersioning(const GetBucketVersioningRequest& request) const;
  146. GetBucketInventoryConfigurationOutcome GetBucketInventoryConfiguration(const GetBucketInventoryConfigurationRequest& request) const;
  147. InitiateBucketWormOutcome InitiateBucketWorm(const InitiateBucketWormRequest& request) const;
  148. VoidOutcome AbortBucketWorm(const AbortBucketWormRequest& request) const;
  149. VoidOutcome CompleteBucketWorm(const CompleteBucketWormRequest& request) const;
  150. VoidOutcome ExtendBucketWormWorm(const ExtendBucketWormRequest& request) const;
  151. GetBucketWormOutcome GetBucketWorm(const GetBucketWormRequest& request) const;
  152. #endif
  153. /*Object*/
  154. ListObjectOutcome ListObjects(const std::string& bucket) const;
  155. ListObjectOutcome ListObjects(const std::string& bucket, const std::string& prefix) const;
  156. ListObjectOutcome ListObjects(const ListObjectsRequest& request) const;
  157. ListObjectsV2Outcome ListObjectsV2(const ListObjectsV2Request& request) const;
  158. ListObjectVersionsOutcome ListObjectVersions(const std::string& bucket) const;
  159. ListObjectVersionsOutcome ListObjectVersions(const std::string& bucket, const std::string& prefix) const;
  160. ListObjectVersionsOutcome ListObjectVersions(const ListObjectVersionsRequest& request) const;
  161. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key) const;
  162. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content) const;
  163. GetObjectOutcome GetObject(const std::string& bucket, const std::string& key, const std::string& fileToSave) const;
  164. GetObjectOutcome GetObject(const GetObjectRequest& request) const;
  165. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content) const;
  166. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::string& fileToUpload) const;
  167. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::shared_ptr<std::iostream>& content, const ObjectMetaData& meta) const;
  168. PutObjectOutcome PutObject(const std::string& bucket, const std::string& key, const std::string& fileToUpload, const ObjectMetaData& meta) const;
  169. PutObjectOutcome PutObject(const PutObjectRequest& request) const;
  170. DeleteObjectOutcome DeleteObject(const std::string& bucket, const std::string& key) const;
  171. DeleteObjectOutcome DeleteObject(const DeleteObjectRequest& request) const;
  172. DeleteObjecstOutcome DeleteObjects(const std::string bucket, const DeletedKeyList &keyList) const;
  173. DeleteObjecstOutcome DeleteObjects(const DeleteObjectsRequest& request) const;
  174. DeleteObjecVersionstOutcome DeleteObjectVersions(const std::string bucket, const ObjectIdentifierList &objectList) const;
  175. DeleteObjecVersionstOutcome DeleteObjectVersions(const DeleteObjectVersionsRequest& request) const;
  176. ObjectMetaDataOutcome HeadObject(const std::string& bucket, const std::string& key) const;
  177. ObjectMetaDataOutcome HeadObject(const HeadObjectRequest& request) const;
  178. ObjectMetaDataOutcome GetObjectMeta(const std::string& bucket, const std::string& key) const;
  179. ObjectMetaDataOutcome GetObjectMeta(const GetObjectMetaRequest& request) const;
  180. AppendObjectOutcome AppendObject(const AppendObjectRequest& request) const;
  181. CopyObjectOutcome CopyObject(const CopyObjectRequest& request) const;
  182. RestoreObjectOutcome RestoreObject(const std::string& bucket, const std::string& key) const;
  183. RestoreObjectOutcome RestoreObject(const RestoreObjectRequest& request) const;
  184. SetObjectAclOutcome SetObjectAcl(const SetObjectAclRequest& request) const;
  185. GetObjectAclOutcome GetObjectAcl(const GetObjectAclRequest& request) const;
  186. CreateSymlinkOutcome CreateSymlink(const CreateSymlinkRequest& request) const;
  187. GetSymlinkOutcome GetSymlink(const GetSymlinkRequest& request) const;
  188. GetObjectOutcome ProcessObject(const ProcessObjectRequest& request) const;
  189. GetObjectOutcome SelectObject(const SelectObjectRequest& request) const;
  190. CreateSelectObjectMetaOutcome CreateSelectObjectMeta(const CreateSelectObjectMetaRequest& request) const;
  191. SetObjectTaggingOutcome SetObjectTagging(const SetObjectTaggingRequest& request) const;
  192. DeleteObjectTaggingOutcome DeleteObjectTagging(const DeleteObjectTaggingRequest& request) const;
  193. GetObjectTaggingOutcome GetObjectTagging(const GetObjectTaggingRequest& request) const;
  194. /*MultipartUpload*/
  195. InitiateMultipartUploadOutcome InitiateMultipartUpload(const InitiateMultipartUploadRequest& request) const;
  196. PutObjectOutcome UploadPart(const UploadPartRequest& request) const;
  197. UploadPartCopyOutcome UploadPartCopy(const UploadPartCopyRequest& request) const;
  198. CompleteMultipartUploadOutcome CompleteMultipartUpload(const CompleteMultipartUploadRequest& request) const;
  199. VoidOutcome AbortMultipartUpload(const AbortMultipartUploadRequest& request) const;
  200. ListMultipartUploadsOutcome ListMultipartUploads(const ListMultipartUploadsRequest& request) const;
  201. ListPartsOutcome ListParts(const ListPartsRequest& request) const;
  202. /*Generate URL*/
  203. StringOutcome GeneratePresignedUrl(const GeneratePresignedUrlRequest& request) const;
  204. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key) const;
  205. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key, int64_t expires) const;
  206. StringOutcome GeneratePresignedUrl(const std::string& bucket, const std::string& key, int64_t expires, Http::Method method) const;
  207. GetObjectOutcome GetObjectByUrl(const GetObjectByUrlRequest& request) const;
  208. GetObjectOutcome GetObjectByUrl(const std::string& url) const;
  209. GetObjectOutcome GetObjectByUrl(const std::string& url, const std::string& file) const;
  210. PutObjectOutcome PutObjectByUrl(const PutObjectByUrlRequest& request) const;
  211. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::string& file) const;
  212. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::string& file, const ObjectMetaData& metaData) const;
  213. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::shared_ptr<std::iostream>& content) const;
  214. PutObjectOutcome PutObjectByUrl(const std::string& url, const std::shared_ptr<std::iostream>& content, const ObjectMetaData& metaData) const;
  215. /*Generate Post Policy*/
  216. /*Resumable Operation*/
  217. #if !defined(OSS_DISABLE_RESUAMABLE)
  218. PutObjectOutcome ResumableUploadObject(const UploadObjectRequest& request) const;
  219. CopyObjectOutcome ResumableCopyObject(const MultiCopyObjectRequest& request) const;
  220. GetObjectOutcome ResumableDownloadObject(const DownloadObjectRequest& request) const;
  221. #endif
  222. #if !defined(OSS_DISABLE_LIVECHANNEL)
  223. /*Live Channel*/
  224. VoidOutcome PutLiveChannelStatus(const PutLiveChannelStatusRequest& request) const;
  225. PutLiveChannelOutcome PutLiveChannel(const PutLiveChannelRequest& request) const;
  226. VoidOutcome PostVodPlaylist(const PostVodPlaylistRequest& request) const;
  227. GetVodPlaylistOutcome GetVodPlaylist(const GetVodPlaylistRequest& request) const;
  228. GetLiveChannelStatOutcome GetLiveChannelStat(const GetLiveChannelStatRequest& request) const;
  229. GetLiveChannelInfoOutcome GetLiveChannelInfo(const GetLiveChannelInfoRequest& request) const;
  230. GetLiveChannelHistoryOutcome GetLiveChannelHistory(const GetLiveChannelHistoryRequest& request) const;
  231. ListLiveChannelOutcome ListLiveChannel(const ListLiveChannelRequest& request) const;
  232. VoidOutcome DeleteLiveChannel(const DeleteLiveChannelRequest& request) const;
  233. StringOutcome GenerateRTMPSignedUrl(const GenerateRTMPSignedUrlRequest& request) const;
  234. #endif
  235. /*Aysnc APIs*/
  236. void ListObjectsAsync(const ListObjectsRequest& request, const ListObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  237. void GetObjectAsync(const GetObjectRequest& request, const GetObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  238. void PutObjectAsync(const PutObjectRequest& request, const PutObjectAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  239. void UploadPartAsync(const UploadPartRequest& request, const UploadPartAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  240. void UploadPartCopyAsync(const UploadPartCopyRequest& request, const UploadPartCopyAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  241. /*Callable APIs*/
  242. ListObjectOutcomeCallable ListObjectsCallable(const ListObjectsRequest& request) const;
  243. GetObjectOutcomeCallable GetObjectCallable(const GetObjectRequest& request) const;
  244. PutObjectOutcomeCallable PutObjectCallable(const PutObjectRequest& request) const;
  245. PutObjectOutcomeCallable UploadPartCallable(const UploadPartRequest& request) const;
  246. UploadPartCopyOutcomeCallable UploadPartCopyCallable(const UploadPartCopyRequest& request) const;
  247. /*Extended APIs*/
  248. #if !defined(OSS_DISABLE_BUCKET)
  249. bool DoesBucketExist(const std::string& bucket) const;
  250. #endif
  251. bool DoesObjectExist(const std::string& bucket, const std::string& key) const;
  252. CopyObjectOutcome ModifyObjectMeta(const std::string& bucket, const std::string& key, const ObjectMetaData& meta);
  253. /*Requests control*/
  254. void DisableRequest();
  255. void EnableRequest();
  256. /*Others*/
  257. void SetRegion(const std::string& region);
  258. void SetCloudBoxId(const std::string& cloudboxId);
  259. protected:
  260. std::shared_ptr<OssClientImpl> client_;
  261. };
  262. }
  263. }