aliyun-oss-react-native

OSSClient.h 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. //
  2. // OSSClient.h
  3. // oss_ios_sdk
  4. //
  5. // Created by zhouzhuo on 8/16/15.
  6. // Copyright (c) 2015 aliyun.com. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @class OSSGetServiceRequest;
  10. @class OSSCreateBucketRequest;
  11. @class OSSDeleteBucketRequest;
  12. @class OSSHeadObjectRequest;
  13. @class OSSGetBucketRequest;
  14. @class OSSGetBucketACLRequest;
  15. @class OSSGetObjectRequest;
  16. @class OSSPutObjectRequest;
  17. @class OSSPutObjectACLRequest;
  18. @class OSSDeleteObjectRequest;
  19. @class OSSCopyObjectRequest;
  20. @class OSSInitMultipartUploadRequest;
  21. @class OSSUploadPartRequest;
  22. @class OSSCompleteMultipartUploadRequest;
  23. @class OSSListPartsRequest;
  24. @class OSSAbortMultipartUploadRequest;
  25. @class OSSAppendObjectRequest;
  26. @class OSSResumableUploadRequest;
  27. @class OSSTask;
  28. @class OSSExecutor;
  29. @class OSSNetworking;
  30. @class OSSClientConfiguration;
  31. @protocol OSSCredentialProvider;
  32. NS_ASSUME_NONNULL_BEGIN
  33. /**
  34. OSSClient是OSS服务的iOS客户端,它为调用者提供了一系列的方法,用于和OSS服务进行交互。
  35. 一般来说,全局内只需要保持一个OSSClient,用来调用各种操作。
  36. */
  37. @interface OSSClient : NSObject
  38. /**
  39. OSS访问域名
  40. */
  41. @property (nonatomic, strong) NSString * endpoint;
  42. /**
  43. 用以收发网络请求
  44. */
  45. @property (nonatomic, strong) OSSNetworking * networking;
  46. /**
  47. 提供访问所需凭证
  48. */
  49. @property (nonatomic, strong) id<OSSCredentialProvider> credentialProvider;
  50. /**
  51. 客户端设置
  52. */
  53. @property (nonatomic, strong) OSSClientConfiguration * clientConfiguration;
  54. /**
  55. 任务队列
  56. */
  57. @property (nonatomic, strong, readonly) OSSExecutor * ossOperationExecutor;
  58. /**
  59. 初始化OSSClient,使用默认的本地设置
  60. @endpoint 指明Bucket所在的Region域名,2017年以后苹果要求APP符合ATS政策,这里要写https的endpoint,如 "https://oss-cn-hangzhou.aliyuncs.com"
  61. @credentialProvider 需要实现的签名器
  62. */
  63. - (instancetype)initWithEndpoint:(NSString *)endpoint
  64. credentialProvider:(id<OSSCredentialProvider>) credentialProvider;
  65. /**
  66. 初始化OSSClient,使用自定义设置
  67. @endpoint 指明Bucket所在的Region域名,2017年以后苹果要求APP符合ATS政策,这里要写https的endpoint,如 "https://oss-cn-hangzhou.aliyuncs.com"
  68. @credentialProvider 需要实现的签名器
  69. @conf 可以设置一些本地参数如重试次数、超时时间等
  70. */
  71. - (instancetype)initWithEndpoint:(NSString *)endpoint
  72. credentialProvider:(id<OSSCredentialProvider>)credentialProvider
  73. clientConfiguration:(OSSClientConfiguration *)conf;
  74. #pragma mark restful-api
  75. /**
  76. 对应RESTFul API:GetService
  77. 获取请求者当前拥有的全部Bucket。
  78. 注意:
  79. 1. 尚不支持STS;
  80. 2. 当所有的bucket都返回时,返回的xml中不包含Prefix、Marker、MaxKeys、IsTruncated、NextMarker节点,如果还有部分结果未返回,则增加上述节点,其中NextMarker用于继续查询时给marker赋值。
  81. */
  82. - (OSSTask *)getService:(OSSGetServiceRequest *)request;
  83. /**
  84. 对应RESTFul API:PutBucket
  85. 用于创建Bucket(不支持匿名访问)。默认情况下,创建的Bucket位于默认的数据中心:oss-cn-hangzhou。
  86. 用户可以显式指定Bucket位于的数据中心,从而最优化延迟,最小化费用或者满足监管要求等。
  87. 注意:
  88. 1. 尚不支持STS。
  89. */
  90. - (OSSTask *)createBucket:(OSSCreateBucketRequest *)request;
  91. /**
  92. 对应RESTFul API:DeleteBucket
  93. 用于删除某个Bucket。
  94. */
  95. - (OSSTask *)deleteBucket:(OSSDeleteBucketRequest *)request;
  96. /**
  97. 对应RESTFul API:GetBucket
  98. 用来list Bucket中所有Object的信息,可以通过prefix,marker,delimiter和max-keys对list做限定,返回部分结果。
  99. */
  100. - (OSSTask *)getBucket:(OSSGetBucketRequest *)request;
  101. /**
  102. 对应RESTFul API:GetBucketACL
  103. 用来获取某个Bucket的访问权限。
  104. */
  105. - (OSSTask *)getBucketACL:(OSSGetBucketACLRequest *)request;
  106. /**
  107. 对应RESTFul API:HeadObject
  108. 只返回某个Object的meta信息,不返回文件内容。
  109. */
  110. - (OSSTask *)headObject:(OSSHeadObjectRequest *)request;
  111. /**
  112. 对应RESTFul API:GetObject
  113. 用于获取某个Object,此操作要求用户对该Object有读权限。
  114. */
  115. - (OSSTask *)getObject:(OSSGetObjectRequest *)request;
  116. /**
  117. 对应RESTFul API:PutObject
  118. 用于上传文件。
  119. */
  120. - (OSSTask *)putObject:(OSSPutObjectRequest *)request;
  121. /**
  122. Put Object ACL接口用于修改Object的访问权限。目前Object有三种访问权限:private, public-read, public-read-write。
  123. Put Object ACL操作通过Put请求中的“x-oss-object-acl”头来设置,这个操作只有Bucket Owner有权限执行。如果操作成功,则返回200;否则返回相应的错误码和提示信息。
  124. */
  125. - (OSSTask *)putObjectACL:(OSSPutObjectACLRequest *)request;
  126. /**
  127. 对应RESTFul API:AppendObject
  128. 以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。
  129. */
  130. - (OSSTask *)appendObject:(OSSAppendObjectRequest *)request;
  131. /**
  132. 对应RESTFul API:copyObject
  133. 拷贝一个在OSS上已经存在的object成另外一个object,可以发送一个PUT请求给OSS,并在PUT请求头中添加元素“x-oss-copy-source”来指定拷贝源。
  134. OSS会自动判断出这是一个Copy操作,并直接在服务器端执行该操作。如果拷贝成功,则返回新的object信息给用户。
  135. 该操作适用于拷贝小于1GB的文件。
  136. */
  137. - (OSSTask *)copyObject:(OSSCopyObjectRequest *)request;
  138. /**
  139. 对应RESTFul API:DeleteObject
  140. 用于删除某个Object。
  141. */
  142. - (OSSTask *)deleteObject:(OSSDeleteObjectRequest *)request;
  143. /**
  144. 对应RESTFul API:InitiateMultipartUpload
  145. 使用Multipart Upload模式传输数据前,必须先调用该接口来通知OSS初始化一个Multipart Upload事件。该接口会返回一个OSS服务器创建的全局唯一的Upload ID,用于标识本次Multipart Upload事件。
  146. 用户可以根据这个ID来发起相关的操作,如中止Multipart Upload、查询Multipart Upload等。
  147. */
  148. - (OSSTask *)multipartUploadInit:(OSSInitMultipartUploadRequest *)request;
  149. /**
  150. 对应RESTFul API:UploadPart
  151. 初始化一个Multipart Upload之后,可以根据指定的Object名和Upload ID来分块(Part)上传数据。
  152. 每一个上传的Part都有一个标识它的号码(part number,范围是1~10,000)。
  153. 对于同一个Upload ID,该号码不但唯一标识这一块数据,也标识了这块数据在整个文件内的相对位置。
  154. 如果你用同一个part号码,上传了新的数据,那么OSS上已有的这个号码的Part数据将被覆盖。除了最后一块Part以外,其他的part最小为100KB;
  155. 最后一块Part没有大小限制。
  156. */
  157. - (OSSTask *)uploadPart:(OSSUploadPartRequest *)request;
  158. /**
  159. 对应RESTFul API:CompleteMultipartUpload
  160. 在将所有数据Part都上传完成后,必须调用Complete Multipart Upload API来完成整个文件的Multipart Upload。
  161. 在执行该操作时,用户必须提供所有有效的数据Part的列表(包括part号码和ETAG);OSS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。
  162. 当所有的数据Part验证通过后,OSS将把这些数据part组合成一个完整的Object。
  163. */
  164. - (OSSTask *)completeMultipartUpload:(OSSCompleteMultipartUploadRequest *)request;
  165. /**
  166. 对应RESTFul API:ListParts
  167. 可以罗列出指定Upload ID所属的所有已经上传成功Part。
  168. */
  169. - (OSSTask *)listParts:(OSSListPartsRequest *)request;
  170. /**
  171. 对应RESTFul API:AbortMultipartUpload
  172. 该接口可以根据用户提供的Upload ID中止其对应的Multipart Upload事件。
  173. 当一个Multipart Upload事件被中止后,就不能再使用这个Upload ID做任何操作,已经上传的Part数据也会被删除。
  174. */
  175. - (OSSTask *)abortMultipartUpload:(OSSAbortMultipartUploadRequest *)request;
  176. #pragma mark extention method
  177. /**
  178. 对一个Object签名出一个URL,可以把该URL转给第三方实现授权访问。
  179. @bucketName Object所在的Bucket名称
  180. @objectKey Object名称
  181. @interval 签名URL时,可以指定这个URL的有效时长是多久,单位是秒,比如说需要有效时长为1小时的URL,这里传入3600
  182. */
  183. - (OSSTask *)presignConstrainURLWithBucketName:(NSString *)bucketName
  184. withObjectKey:(NSString *)objectKey
  185. withExpirationInterval:(NSTimeInterval)interval;
  186. /**
  187. 对一个Object签名出一个URL,可以把该URL转给第三方实现授权访问。
  188. @bucketName Object所在的Bucket名称
  189. @objectKey Object名称
  190. @interval 签名URL时,可以指定这个URL的有效时长是多久,单位是秒,比如说需要有效时长为1小时的URL,这里传入3600
  191. @parameter 参数
  192. */
  193. - (OSSTask *)presignConstrainURLWithBucketName:(NSString *)bucketName
  194. withObjectKey:(NSString *)objectKey
  195. withExpirationInterval:(NSTimeInterval)interval
  196. withParameters:(NSDictionary *)parameters;
  197. /**
  198. 如果Object的权限是公共读或者公共读写,调用这个接口对该Object签名出一个URL,可以把该URL转给第三方实现授权访问。
  199. @bucketName Object所在的Bucket名称
  200. @objectKey Object名称
  201. */
  202. - (OSSTask *)presignPublicURLWithBucketName:(NSString *)bucketName
  203. withObjectKey:(NSString *)objectKey;
  204. /**
  205. 如果Object的权限是公共读或者公共读写,调用这个接口对该Object签名出一个URL,可以把该URL转给第三方实现授权访问。
  206. @bucketName Object所在的Bucket名称
  207. @objectKey Object名称
  208. @parameter 参数
  209. */
  210. - (OSSTask *)presignPublicURLWithBucketName:(NSString *)bucketName
  211. withObjectKey:(NSString *)objectKey
  212. withParameters:(NSDictionary *)parameters;
  213. /**
  214. 断点上传接口
  215. 这个接口封装了分块上传的若干接口以实现断点上传,但是需要用户自行保存UploadId。
  216. 对一个新文件,用户需要首先调用multipartUploadInit接口获得一个UploadId,然后调用此接口上传这个文件。
  217. 如果上传失败,首先需要检查一下失败原因:
  218. 如果非不可恢复的失败,那么可以用同一个UploadId和同一文件继续调用这个接口续传
  219. 否则,需要重新获取UploadId,重新上传这个文件。
  220. 详细参考demo。
  221. */
  222. - (OSSTask *)resumableUpload:(OSSResumableUploadRequest *)request;
  223. /**
  224. 查看某个Object是否存在
  225. @bucketName Object所在的Bucket名称
  226. @objectKey Object名称
  227. return YES Object存在
  228. return NO && *error = nil Object不存在
  229. return NO && *error != nil 发生错误
  230. */
  231. - (BOOL)doesObjectExistInBucket:(NSString *)bucketName
  232. objectKey:(NSString *)objectKey
  233. error:(const NSError **)error;
  234. @end
  235. NS_ASSUME_NONNULL_END