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