aliyun-oss-react-native

OSSModel.h 33KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304
  1. //
  2. // OSSModel.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 OSSAllRequestNeededMessage;
  10. @class OSSFederationToken;
  11. @class OSSTask;
  12. typedef NS_ENUM(NSInteger, OSSOperationType) {
  13. OSSOperationTypeGetService,
  14. OSSOperationTypeCreateBucket,
  15. OSSOperationTypeDeleteBucket,
  16. OSSOperationTypeGetBucket,
  17. OSSOperationTypeGetBucketACL,
  18. OSSOperationTypeHeadObject,
  19. OSSOperationTypeGetObject,
  20. OSSOperationTypePutObject,
  21. OSSOperationTypePutObjectACL,
  22. OSSOperationTypeAppendObject,
  23. OSSOperationTypeDeleteObject,
  24. OSSOperationTypeCopyObject,
  25. OSSOperationTypeInitMultipartUpload,
  26. OSSOperationTypeUploadPart,
  27. OSSOperationTypeCompleteMultipartUpload,
  28. OSSOperationTypeAbortMultipartUpload,
  29. OSSOperationTypeListMultipart
  30. };
  31. typedef NS_ENUM(NSInteger, OSSClientErrorCODE) {
  32. OSSClientErrorCodeNetworkingFailWithResponseCode0,
  33. OSSClientErrorCodeSignFailed,
  34. OSSClientErrorCodeFileCantWrite,
  35. OSSClientErrorCodeInvalidArgument,
  36. OSSClientErrorCodeNilUploadid,
  37. OSSClientErrorCodeTaskCancelled,
  38. OSSClientErrorCodeNetworkError,
  39. OSSClientErrorCodeCannotResumeUpload,
  40. OSSClientErrorCodeExcpetionCatched,
  41. OSSClientErrorCodeNotKnown
  42. };
  43. typedef void (^OSSNetworkingUploadProgressBlock) (int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend);
  44. typedef void (^OSSNetworkingDownloadProgressBlock) (int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite);
  45. typedef void (^OSSNetworkingCompletionHandlerBlock) (id responseObject, NSError *error);
  46. typedef void (^OSSNetworkingOnRecieveDataBlock) (NSData * data);
  47. typedef NSString * (^OSSCustomSignContentBlock) (NSString * contentToSign, NSError **error);
  48. typedef OSSFederationToken * (^OSSGetFederationTokenBlock) ();
  49. /**
  50. 扩展NSString
  51. */
  52. @interface NSString (OSS)
  53. - (NSString *)oss_stringByAppendingPathComponentForURL:(NSString *)aString;
  54. - (NSString *)oss_trim;
  55. @end
  56. /**
  57. 扩展NSDictionary
  58. */
  59. @interface NSDictionary (OSS)
  60. - (NSString *)base64JsonString;
  61. @end
  62. /**
  63. 扩展NSDate
  64. */
  65. @interface NSDate (OSS)
  66. + (void)oss_setStandardTimeIntervalSince1970:(NSTimeInterval)standardTime;
  67. + (void)oss_setClockSkew:(NSTimeInterval)clockSkew;
  68. + (NSDate *)oss_dateFromString:(NSString *)string;
  69. + (NSDate *)oss_clockSkewFixedDate;
  70. - (NSString *)oss_asStringValue;
  71. @end
  72. /**
  73. 线程安全的字典
  74. */
  75. @interface OSSSyncMutableDictionary : NSObject
  76. @property (nonatomic, strong) NSMutableDictionary *dictionary;
  77. @property (nonatomic, strong) dispatch_queue_t dispatchQueue;
  78. - (id)objectForKey:(id)aKey;
  79. - (NSArray *)allKeys;
  80. - (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
  81. - (void)removeObjectForKey:(id)aKey;
  82. @end
  83. /**
  84. FederationToken类
  85. */
  86. @interface OSSFederationToken : NSObject
  87. @property (nonatomic, strong) NSString * tAccessKey;
  88. @property (nonatomic, strong) NSString * tSecretKey;
  89. @property (nonatomic, strong) NSString * tToken;
  90. /**
  91. 指明Token的失效时间,为linux时间对应的毫秒数,即自UTC时间1970年1月1日经过的毫秒数
  92. */
  93. @property (atomic, assign) int64_t expirationTimeInMilliSecond;
  94. /**
  95. 指明Token的失效时间,格式为GMT字符串,如: "2015-11-03T08:51:05Z"
  96. */
  97. @property (atomic, strong) NSString * expirationTimeInGMTFormat;
  98. @end
  99. /**
  100. CredentialProvider协议,要求实现加签接口
  101. */
  102. @protocol OSSCredentialProvider <NSObject>
  103. @optional
  104. - (NSString *)sign:(NSString *)content error:(NSError **)error;
  105. @end
  106. /**
  107. 用明文AK/SK实现的加签器,建议只在测试模式时使用
  108. */
  109. @interface OSSPlainTextAKSKPairCredentialProvider : NSObject <OSSCredentialProvider>
  110. @property (nonatomic, strong) NSString * accessKey;
  111. @property (nonatomic, strong) NSString * secretKey;
  112. - (instancetype)initWithPlainTextAccessKey:(NSString *)accessKey
  113. secretKey:(NSString *)secretKey __attribute__((deprecated("We recommend the STS authentication mode on mobile")));
  114. @end
  115. /**
  116. 用户自实现加签接口的加签器
  117. */
  118. @interface OSSCustomSignerCredentialProvider : NSObject <OSSCredentialProvider>
  119. @property (nonatomic, copy) NSString * (^signContent)(NSString *, NSError **);
  120. /**
  121. 任务执行时,这个方法会被调用,进行加签
  122. 会在任务执行的后台线程被调用,而非UI线程
  123. */
  124. - (instancetype)initWithImplementedSigner:(OSSCustomSignContentBlock)signContent;
  125. @end
  126. /**
  127. 用户自实现的通过获取FederationToken来加签的加签器
  128. */
  129. @interface OSSFederationCredentialProvider : NSObject <OSSCredentialProvider>
  130. @property (nonatomic, strong) OSSFederationToken * cachedToken;
  131. @property (nonatomic, copy) OSSFederationToken * (^federationTokenGetter)();
  132. /**
  133. 任务执行时,这个方法会被调用,获取新的ststoken
  134. 会在任务执行的后台线程被调用,而非UI线程
  135. */
  136. - (instancetype)initWithFederationTokenGetter:(OSSGetFederationTokenBlock)federationTokenGetter;
  137. - (OSSFederationToken *)getToken:(NSError **)error;
  138. @end
  139. /**
  140. 通过已经获取到的StsToken来加签的加签器
  141. */
  142. @interface OSSStsTokenCredentialProvider : NSObject <OSSCredentialProvider>
  143. @property (nonatomic, strong) NSString * accessKeyId;
  144. @property (nonatomic, strong) NSString * secretKeyId;
  145. @property (nonatomic, strong) NSString * securityToken;
  146. - (OSSFederationToken *)getToken;
  147. - (instancetype)initWithAccessKeyId:(NSString *)accessKeyId
  148. secretKeyId:(NSString *)secretKeyId
  149. securityToken:(NSString *)securityToken;
  150. @end
  151. /**
  152. OSSClient可以设置的参数
  153. */
  154. @interface OSSClientConfiguration : NSObject
  155. /**
  156. 最大重试次数
  157. */
  158. @property (nonatomic, assign) uint32_t maxRetryCount;
  159. /**
  160. 最大并发请求数
  161. */
  162. @property (nonatomic, assign) uint32_t maxConcurrentRequestCount;
  163. /**
  164. 是否开启后台传输服务
  165. 注意:只在上传文件时有效
  166. */
  167. @property (nonatomic, assign) BOOL enableBackgroundTransmitService;
  168. /**
  169. 是否使用Httpdns解析域名
  170. */
  171. @property (nonatomic, assign) BOOL isHttpdnsEnable;
  172. /**
  173. 设置后台传输服务使用session的Id
  174. */
  175. @property (nonatomic, strong) NSString * backgroundSesseionIdentifier;
  176. /**
  177. 请求超时时间
  178. */
  179. @property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;
  180. /**
  181. 单个Object下载的最长持续时间
  182. */
  183. @property (nonatomic, assign) NSTimeInterval timeoutIntervalForResource;
  184. /**
  185. 设置代理Host、端口
  186. */
  187. @property (nonatomic, strong) NSString * proxyHost;
  188. @property (nonatomic, strong) NSNumber * proxyPort;
  189. /**
  190. 设置Cname排除列表
  191. */
  192. @property (nonatomic, strong, setter=setCnameExcludeList:) NSArray * cnameExcludeList;
  193. @end
  194. @protocol OSSRequestInterceptor <NSObject>
  195. - (OSSTask *)interceptRequestMessage:(OSSAllRequestNeededMessage *)request;
  196. @end
  197. /**
  198. 构造请求过程中做加签
  199. */
  200. @interface OSSSignerInterceptor : NSObject <OSSRequestInterceptor>
  201. @property (nonatomic, strong) id<OSSCredentialProvider> credentialProvider;
  202. - (instancetype)initWithCredentialProvider:(id<OSSCredentialProvider>)credentialProvider;
  203. @end
  204. /**
  205. 构造请求过程中修改UA
  206. */
  207. @interface OSSUASettingInterceptor : NSObject <OSSRequestInterceptor>
  208. @end
  209. /**
  210. 构造请求过程中设置发起请求的标准时间
  211. */
  212. @interface OSSTimeSkewedFixingInterceptor : NSObject <OSSRequestInterceptor>
  213. @end
  214. /**
  215. 下载时指定范围
  216. */
  217. @interface OSSRange : NSObject
  218. @property (nonatomic, assign) int64_t startPosition;
  219. @property (nonatomic, assign) int64_t endPosition;
  220. - (instancetype)initWithStart:(int64_t)start
  221. withEnd:(int64_t)end;
  222. /**
  223. * 转换为字符串: 'bytes=${start}-${end}'
  224. */
  225. - (NSString *)toHeaderString;
  226. @end
  227. #pragma mark RequestAndResultClass
  228. /**
  229. 请求头的基类
  230. */
  231. @interface OSSRequest : NSObject
  232. /**
  233. 指明该请求是否需要鉴权,单次有效
  234. */
  235. @property (nonatomic, assign) BOOL isAuthenticationRequired;
  236. /**
  237. 指明该请求是否已经被取消
  238. */
  239. @property (nonatomic, assign) BOOL isCancelled;
  240. /**
  241. 取消这个请求
  242. */
  243. - (void)cancel;
  244. @end
  245. /**
  246. 请求结果的基类
  247. */
  248. @interface OSSResult : NSObject
  249. /**
  250. 请求HTTP响应码
  251. */
  252. @property (nonatomic, assign) NSInteger httpResponseCode;
  253. /**
  254. 请求HTTP响应头部,以KV形式放在字典中
  255. */
  256. @property (nonatomic, strong) NSDictionary * httpResponseHeaderFields;
  257. /**
  258. x-oss-request-id是由Aliyun OSS创建,并唯一标识这个response的UUID。如果在使用OSS服务时遇到问题,可以凭借该字段联系OSS工作人员,快速定位问题。
  259. */
  260. @property (nonatomic, strong) NSString * requestId;
  261. @end
  262. /**
  263. 罗列用户拥有的所有Bucket的请求。
  264. */
  265. @interface OSSGetServiceRequest : OSSRequest
  266. /**
  267. 限定返回的bucket name必须以prefix作为前缀,可以不设定,不设定时不过滤前缀信息
  268. */
  269. @property (nonatomic, strong) NSString * prefix;
  270. /**
  271. 设定结果从marker之后按字母排序的第一个开始返回,可以不设定,不设定时从头开始返回
  272. */
  273. @property (nonatomic, strong) NSString * marker;
  274. /**
  275. 限定此次返回bucket的最大数,如果不设定,默认为100,max-keys取值不能大于1000
  276. */
  277. @property (nonatomic, assign) int32_t maxKeys;
  278. /**
  279. 根据参数各字段构造URL中的查询串
  280. */
  281. - (NSMutableDictionary *)getQueryDict;
  282. @end
  283. /**
  284. 罗列用户拥有的所有Bucket的请求结果
  285. */
  286. @interface OSSGetServiceResult : OSSResult
  287. /**
  288. Bucket拥有者的用户ID
  289. */
  290. @property (nonatomic, strong) NSString * ownerId;
  291. /**
  292. Bucket拥有者的名称 (目前和ID一致)。
  293. */
  294. @property (nonatomic, strong) NSString * ownerDispName;
  295. /**
  296. 本次查询结果的前缀,当bucket未全部返回时才有此节点
  297. */
  298. @property (nonatomic, strong) NSString * prefix;
  299. /**
  300. 标明这次GetService(ListBucket)的起点,当bucket未全部返回时才有此节点
  301. */
  302. @property (nonatomic, strong) NSString * marker;
  303. /**
  304. 响应请求内返回结果的最大数目,当bucket未全部返回时才有此节点
  305. */
  306. @property (nonatomic, assign) int32_t maxKeys;
  307. /**
  308. 指明是否所有的结果都已经返回:“true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。当bucket未全部返回时才有此节点。
  309. */
  310. @property (nonatomic, assign) BOOL isTruncated;
  311. /**
  312. 表示下一次GetService(ListBucket)可以以此为marker,将未返回的结果返回。当bucket未全部返回时才有此节点。
  313. */
  314. @property (nonatomic, strong) NSString * nextMarker;
  315. /**
  316. 保存bucket信息的容器,结构上是一个数组,数组每个元素是一个字典,字典的key有 ["Name", "CreationDate", "Location" ]
  317. */
  318. @property (nonatomic, strong) NSArray * buckets;
  319. @end
  320. /**
  321. 创建Bucket的请求
  322. */
  323. @interface OSSCreateBucketRequest : OSSRequest
  324. /**
  325. 要创建的Bucket的名称
  326. */
  327. @property (nonatomic, strong) NSString * bucketName;
  328. /**
  329. 指定Bucket所在的数据中心。
  330. 关于数据中心和终端域名的更多内容,参见访问域名和数据中心<a>https://docs.aliyun.com/#/pub/oss/product-documentation/domain-region</a>
  331. */
  332. @property (nonatomic, strong) NSString * location;
  333. /**
  334. 设置Bucket 访问权限。目前Bucket有三种访问权限:public-read-write,public-read和private。
  335. */
  336. @property (nonatomic, strong) NSString * xOssACL;
  337. @end
  338. /**
  339. 创建Bucket的请求结果
  340. */
  341. @interface OSSCreateBucketResult : OSSResult
  342. /**
  343. Bucket所在的数据中心
  344. */
  345. @property (nonatomic, strong) NSString * location;
  346. @end
  347. /**
  348. 删除Bucket的请求
  349. */
  350. @interface OSSDeleteBucketRequest : OSSRequest
  351. /**
  352. Bucket的名称
  353. */
  354. @property (nonatomic, strong) NSString * bucketName;
  355. @end
  356. /**
  357. 删除Bucket的请求结果
  358. */
  359. @interface OSSDeleteBucketResult : OSSResult
  360. @end
  361. /**
  362. 罗列Bucket中Objects的请求
  363. */
  364. @interface OSSGetBucketRequest : OSSRequest
  365. /**
  366. Bucket名称
  367. */
  368. @property (nonatomic, strong) NSString * bucketName;
  369. /**
  370. 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes。
  371. */
  372. @property (nonatomic, strong) NSString * delimiter;
  373. /**
  374. 设定结果从marker之后按字母排序的第一个开始返回。
  375. */
  376. @property (nonatomic, strong) NSString * marker;
  377. /**
  378. 限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000。
  379. */
  380. @property (nonatomic, assign) int32_t maxKeys;
  381. /**
  382. 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。
  383. */
  384. @property (nonatomic, strong) NSString * prefix;
  385. /**
  386. 根据请求的各个字段生成URL中的查询串
  387. */
  388. - (NSMutableDictionary *)getQueryDict;
  389. @end
  390. /**
  391. 罗列Bucket中Objects的请求结果
  392. */
  393. @interface OSSGetBucketResult : OSSResult
  394. /**
  395. Bucket名称
  396. */
  397. @property (nonatomic, strong) NSString * bucketName;
  398. /**
  399. 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。
  400. */
  401. @property (nonatomic, strong) NSString * prefix;
  402. /**
  403. 设定结果从marker之后按字母排序的第一个开始返回。
  404. */
  405. @property (nonatomic, strong) NSString * marker;
  406. /**
  407. 限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000。
  408. */
  409. @property (nonatomic, assign) int32_t maxKeys;
  410. /**
  411. 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素——CommonPrefixes。
  412. */
  413. @property (nonatomic, strong) NSString * delimiter;
  414. /**
  415. 如果因为max-keys的设定无法一次完成listing,返回结果会附加一个<NextMarker>,提示继续listing可以以此为marker。
  416. NextMarker中的值仍在list结果之中。
  417. */
  418. @property (nonatomic, strong) NSString * nextMarker;
  419. /**
  420. 指明是否所有的结果都已经返回; “true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。
  421. */
  422. @property (nonatomic, assign) BOOL isTruncated;
  423. /**
  424. 装载文件信息的容器,结构为一个数组,数组中元素是一个个字典,代表每个文件,字典的key有 [ "Key", "LastModified", "ETag", "Type", "Size", "StorageClass", "Owner" ]
  425. */
  426. @property (nonatomic, strong) NSArray * contents;
  427. /**
  428. 装载公共前缀信息的容器,结构为一个数组,数组中元素是NSString,每个代表一个前缀
  429. */
  430. @property (nonatomic, strong) NSArray * commentPrefixes;
  431. @end
  432. /**
  433. 获取指定Bucket的读写权限
  434. */
  435. @interface OSSGetBucketACLRequest : OSSRequest
  436. /**
  437. Bucket名称
  438. */
  439. @property (nonatomic, strong) NSString * bucketName;
  440. @end
  441. /**
  442. 获取指定Bucket的ACL的请求结果
  443. */
  444. @interface OSSGetBucketACLResult : OSSResult
  445. /**
  446. 获取到的Bucket的ACL,有 private/public-read/public-read-write
  447. */
  448. @property (nonatomic, strong) NSString * aclGranted;
  449. @end
  450. /**
  451. 获取Object Meta信息的请求
  452. */
  453. @interface OSSHeadObjectRequest : OSSRequest
  454. /**
  455. Object所在Bucket的名称
  456. */
  457. @property (nonatomic, strong) NSString * bucketName;
  458. /**
  459. Object名称
  460. */
  461. @property (nonatomic, strong) NSString * objectKey;
  462. @end
  463. /**
  464. 获取Object Meta信息的结果
  465. */
  466. @interface OSSHeadObjectResult : OSSResult
  467. /**
  468. Obejct的Meta信息
  469. */
  470. @property (nonatomic, strong) NSDictionary * objectMeta;
  471. @end
  472. /**
  473. 下载Object的请求头
  474. */
  475. @interface OSSGetObjectRequest : OSSRequest
  476. /**
  477. Bucket名称
  478. */
  479. @property (nonatomic, strong) NSString * bucketName;
  480. /**
  481. Object名称
  482. */
  483. @property (nonatomic, strong) NSString * objectKey;
  484. /**
  485. 指定文件传输的范围。如,设定 bytes=0-9,表示传送第0到第9这10个字符。
  486. */
  487. @property (nonatomic, strong) OSSRange * range;
  488. /**
  489. 如果希望Object直接下载到文件中,通过这个字段指明文件地址
  490. */
  491. @property (nonatomic, strong) NSURL * downloadToFileURL;
  492. /**
  493. 图片处理配置
  494. */
  495. @property (nonatomic, strong) NSString * xOssProcess;
  496. /**
  497. 回调下载进度
  498. 会在任务执行的后台线程被回调,而非UI线程
  499. */
  500. @property (nonatomic, copy) OSSNetworkingDownloadProgressBlock downloadProgress;
  501. /**
  502. Object下载过程中,会在接收每一段数据后回调这个Block
  503. 会在任务执行的后台线程被回调,而非UI线程
  504. */
  505. @property (nonatomic, copy) OSSNetworkingOnRecieveDataBlock onRecieveData;
  506. @end
  507. /**
  508. 下载Object的请求结果
  509. */
  510. @interface OSSGetObjectResult : OSSResult
  511. /**
  512. 如果下载时未指明下载到文件,那么Object会被下载到内存中,类型为NSData
  513. */
  514. @property (nonatomic, strong) NSData * downloadedData;
  515. /**
  516. 下载文件时的HTTP响应头的KV字典
  517. */
  518. @property (nonatomic, strong) NSDictionary * objectMeta;
  519. @end
  520. /**
  521. 修改Object的访问权限请求头
  522. */
  523. @interface OSSPutObjectACLRequest : OSSRequest
  524. /**
  525. Bucket名称
  526. */
  527. @property (nonatomic, strong) NSString * bucketName;
  528. /**
  529. Object名称
  530. */
  531. @property (nonatomic, strong) NSString * objectKey;
  532. /**
  533. */
  534. @property (nonatomic, strong) NSString * acl;
  535. @end
  536. /**
  537. 修改Object的访问权限响应
  538. */
  539. @interface OSSPutObjectACLResult : OSSResult
  540. @end
  541. /**
  542. 上传Object的请求头
  543. */
  544. @interface OSSPutObjectRequest : OSSRequest
  545. /**
  546. Bucket名称
  547. */
  548. @property (nonatomic, strong) NSString * bucketName;
  549. /**
  550. Object名称
  551. */
  552. @property (nonatomic, strong) NSString * objectKey;
  553. /**
  554. 从内存中的NSData上传时,通过这个字段设置
  555. */
  556. @property (nonatomic, strong) NSData * uploadingData;
  557. /**
  558. 从文件上传时,通过这个字段设置
  559. */
  560. @property (nonatomic, strong) NSURL * uploadingFileURL;
  561. /**
  562. server回调参数设置
  563. */
  564. @property (nonatomic, strong) NSDictionary * callbackParam;
  565. /**
  566. server回调变量设置
  567. */
  568. @property (nonatomic, strong) NSDictionary * callbackVar;
  569. /**
  570. 设置文件类型
  571. */
  572. @property (nonatomic, strong) NSString * contentType;
  573. /**
  574. 根据协议RFC 1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值。
  575. 该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查。
  576. */
  577. @property (nonatomic, strong) NSString * contentMd5;
  578. /**
  579. 指定该Object被下载时的名称;更详细描述请参照RFC2616。
  580. */
  581. @property (nonatomic, strong) NSString * contentDisposition;
  582. /**
  583. 指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616。
  584. */
  585. @property (nonatomic, strong) NSString * contentEncoding;
  586. /**
  587. 指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616。
  588. */
  589. @property (nonatomic, strong) NSString * cacheControl;
  590. /**
  591. 过期时间(milliseconds);更详细描述请参照RFC2616。
  592. */
  593. @property (nonatomic, strong) NSString * expires;
  594. /**
  595. 可以在这个字段中携带以x-oss-meta-为前缀的参数,则视为user meta,比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的user meta总大小不能超过8k。
  596. 如果上传时还需要指定其他HTTP请求头字段,也可以在这里设置
  597. */
  598. @property (nonatomic, strong) NSDictionary * objectMeta;
  599. /**
  600. 上传进度回调,
  601. 会在任务执行的后台线程被回调,而非UI线程
  602. */
  603. @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadProgress;
  604. @end
  605. /**
  606. 上传Object的请求结果
  607. */
  608. @interface OSSPutObjectResult : OSSResult
  609. /**
  610. ETag (entity tag) 在每个Object生成的时候被创建,用于标示一个Object的内容。
  611. 对于Put Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID。
  612. ETag值可以用于检查Object内容是否发生变化。
  613. */
  614. @property (nonatomic, strong) NSString * eTag;
  615. /**
  616. 如果设置了server回调,回调的响应内容
  617. */
  618. @property (nonatomic, strong) NSString * serverReturnJsonString;
  619. @end
  620. /**
  621. * append object request
  622. */
  623. @interface OSSAppendObjectRequest : OSSRequest
  624. /**
  625. Bucket名称
  626. */
  627. @property (nonatomic, strong) NSString * bucketName;
  628. /**
  629. Object名称
  630. */
  631. @property (nonatomic, strong) NSString * objectKey;
  632. /**
  633. 指定从何处进行追加。首次追加操作的position必须为0,后续追加操作的position是Object的当前长度。
  634. 例如,第一次Append Object请求指定position值为0,content-length是65536;那么,第二次Append Object需要指定position为65536。
  635. 每次操作成功后,响应头部x-oss-next-append-position也会标明下一次追加的position。
  636. */
  637. @property (nonatomic, assign) int64_t appendPosition;
  638. /**
  639. 从内存中的NSData上传时,通过这个字段设置
  640. */
  641. @property (nonatomic, strong) NSData * uploadingData;
  642. /**
  643. 从文件上传时,通过这个字段设置
  644. */
  645. @property (nonatomic, strong) NSURL * uploadingFileURL;
  646. /**
  647. 设置文件类型
  648. */
  649. @property (nonatomic, strong) NSString * contentType;
  650. /**
  651. 根据协议RFC 1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值。
  652. 该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查。
  653. */
  654. @property (nonatomic, strong) NSString * contentMd5;
  655. /**
  656. 指定该Object被下载时的名称;更详细描述请参照RFC2616。
  657. */
  658. @property (nonatomic, strong) NSString * contentDisposition;
  659. /**
  660. 指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616。
  661. */
  662. @property (nonatomic, strong) NSString * contentEncoding;
  663. /**
  664. 指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616。
  665. */
  666. @property (nonatomic, strong) NSString * cacheControl;
  667. /**
  668. 过期时间(milliseconds);更详细描述请参照RFC2616。
  669. */
  670. @property (nonatomic, strong) NSString * expires;
  671. /**
  672. 可以在这个字段中携带以x-oss-meta-为前缀的参数,则视为user meta,比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的user meta总大小不能超过8k。
  673. 如果上传时还需要指定其他HTTP请求头字段,也可以在这里设置
  674. */
  675. @property (nonatomic, strong) NSDictionary * objectMeta;
  676. /**
  677. 上传进度回调
  678. 会在任务执行的后台线程被回调,而非UI线程
  679. */
  680. @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadProgress;
  681. @end
  682. /**
  683. * append object result
  684. */
  685. @interface OSSAppendObjectResult : OSSResult
  686. /**
  687. ETag (entity tag) 在每个Object生成的时候被创建,用于标示一个Object的内容。
  688. 对于Put Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID。
  689. ETag值可以用于检查Object内容是否发生变化。
  690. */
  691. @property (nonatomic, strong) NSString * eTag;
  692. /**
  693. 指明下一次请求应当提供的position。实际上就是当前Object长度。
  694. 当Append Object成功返回,或是因position和Object长度不匹配而引起的409错误时,会包含此header。
  695. */
  696. @property (nonatomic, assign, readwrite) int64_t xOssNextAppendPosition;
  697. @end
  698. /**
  699. 删除指定Object
  700. */
  701. @interface OSSDeleteObjectRequest : OSSRequest
  702. /**
  703. Bucket名称
  704. */
  705. @property (nonatomic, strong) NSString * bucketName;
  706. /**
  707. Object名称
  708. */
  709. @property (nonatomic, strong) NSString * objectKey;
  710. @end
  711. /**
  712. 删除指定Object的响应
  713. */
  714. @interface OSSDeleteObjectResult : OSSResult
  715. @end
  716. /**
  717. 复制一个Object的请求
  718. */
  719. @interface OSSCopyObjectRequest : OSSRequest
  720. /**
  721. Bucket名称
  722. */
  723. @property (nonatomic, strong) NSString * bucketName;
  724. /**
  725. Object名称
  726. */
  727. @property (nonatomic, strong) NSString * objectKey;
  728. /**
  729. 复制源地址(必须有可读权限)
  730. */
  731. @property (nonatomic, strong) NSString * sourceCopyFrom;
  732. /**
  733. 设置文件类型
  734. */
  735. @property (nonatomic, strong) NSString * contentType;
  736. /**
  737. 根据协议RFC 1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值。
  738. 该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查。
  739. */
  740. @property (nonatomic, strong) NSString * contentMd5;
  741. /**
  742. 可以在这个字段中携带以x-oss-meta-为前缀的参数,则视为user meta,比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的user meta总大小不能超过8k。
  743. 如果上传时还需要指定其他HTTP请求头字段,也可以在这里设置
  744. */
  745. @property (nonatomic, strong) NSDictionary * objectMeta;
  746. @end
  747. /**
  748. 复制Object的请求结果
  749. */
  750. @interface OSSCopyObjectResult : OSSResult
  751. /**
  752. 新Object最后更新时间。
  753. */
  754. @property (nonatomic, strong) NSString * lastModifed;
  755. /**
  756. 新Object的ETag值。
  757. */
  758. @property (nonatomic, strong) NSString * eTag;
  759. @end
  760. /**
  761. 初始化分块上传的请求
  762. */
  763. @interface OSSInitMultipartUploadRequest : OSSRequest
  764. /**
  765. Bucket名称
  766. */
  767. @property (nonatomic, strong) NSString * bucketName;
  768. /**
  769. Object名称
  770. */
  771. @property (nonatomic, strong) NSString * objectKey;
  772. /**
  773. 设置文件类型
  774. */
  775. @property (nonatomic, strong) NSString * contentType;
  776. /**
  777. 指定该Object被下载时的名称;更详细描述请参照RFC2616。
  778. */
  779. @property (nonatomic, strong) NSString * contentDisposition;
  780. /**
  781. 指定该Object被下载时的内容编码格式;更详细描述请参照RFC2616。
  782. */
  783. @property (nonatomic, strong) NSString * contentEncoding;
  784. /**
  785. 指定该Object被下载时的网页的缓存行为;更详细描述请参照RFC2616。
  786. */
  787. @property (nonatomic, strong) NSString * cacheControl;
  788. /**
  789. 过期时间(milliseconds);更详细描述请参照RFC2616。
  790. */
  791. @property (nonatomic, strong) NSString * expires;
  792. /**
  793. 可以在这个字段中携带以x-oss-meta-为前缀的参数,则视为user meta,比如x-oss-meta-location。一个Object可以有多个类似的参数,但所有的user meta总大小不能超过8k。
  794. 如果上传时还需要指定其他HTTP请求头字段,也可以在这里设置
  795. */
  796. @property (nonatomic, strong) NSDictionary * objectMeta;
  797. @end
  798. /**
  799. 初始化分块上传的请求结果
  800. */
  801. @interface OSSInitMultipartUploadResult : OSSResult
  802. /**
  803. 唯一标示此次Multipart Upload事件的ID。
  804. */
  805. @property (nonatomic, strong) NSString * uploadId;
  806. @end
  807. /**
  808. 上传单个分块的请求
  809. */
  810. @interface OSSUploadPartRequest : OSSRequest
  811. /**
  812. Bucket名称
  813. */
  814. @property (nonatomic, strong) NSString * bucketName;
  815. /**
  816. Object名称
  817. */
  818. @property (nonatomic, strong) NSString * objectkey;
  819. /**
  820. 唯一标示此次Multipart Upload事件的ID。
  821. */
  822. @property (nonatomic, strong) NSString * uploadId;
  823. /**
  824. 指定本次上传分块的标识号码
  825. */
  826. @property (nonatomic, assign) int partNumber;
  827. /**
  828. 根据协议RFC 1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值。
  829. 该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查。
  830. */
  831. @property (nonatomic, strong) NSString * contentMd5;
  832. /**
  833. 从内存中的NSData上传时,通过这个字段设置
  834. */
  835. @property (nonatomic, strong) NSData * uploadPartData;
  836. /**
  837. 从文件上传时,通过这个字段设置
  838. */
  839. @property (nonatomic, strong) NSURL * uploadPartFileURL;
  840. /**
  841. 上传进度回调
  842. 会在任务执行的后台线程被回调,而非UI线程
  843. */
  844. @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadPartProgress;
  845. @end
  846. /**
  847. 上传单个分块的结果
  848. */
  849. @interface OSSUploadPartResult : OSSResult
  850. @property (nonatomic, strong) NSString * eTag;
  851. @end
  852. /**
  853. 分块上传中每个分块的信息,这些信息将会在调用‘完成分块上传’的接口中使用
  854. */
  855. @interface OSSPartInfo : NSObject
  856. /**
  857. 指定本次上传分块的标识号码
  858. */
  859. @property (nonatomic, assign) int32_t partNum;
  860. /**
  861. Part成功上传后,OSS返回的ETag值。
  862. */
  863. @property (nonatomic, strong) NSString * eTag;
  864. /**
  865. 分块数据长度
  866. */
  867. @property (nonatomic, assign) int64_t size;
  868. + (instancetype)partInfoWithPartNum:(int32_t)partNum
  869. eTag:(NSString *)eTag
  870. size:(int64_t)size;
  871. @end
  872. /**
  873. 完成分块上传请求
  874. */
  875. @interface OSSCompleteMultipartUploadRequest : OSSRequest
  876. /**
  877. Bucket名称
  878. */
  879. @property (nonatomic, strong) NSString * bucketName;
  880. /**
  881. Object名称
  882. */
  883. @property (nonatomic, strong) NSString * objectKey;
  884. /**
  885. 唯一标示此次Multipart Upload事件的ID。
  886. */
  887. @property (nonatomic, strong) NSString * uploadId;
  888. /**
  889. 根据协议RFC 1864对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码为一个消息的Content-MD5值。
  890. 该请求头可用于消息合法性的检查(消息内容是否与发送时一致)。虽然该请求头是可选项,OSS建议用户使用该请求头进行端到端检查。
  891. */
  892. @property (nonatomic, strong) NSString * contentMd5;
  893. /**
  894. 各个分块的信息
  895. */
  896. @property (nonatomic, strong) NSArray * partInfos;
  897. /**
  898. server回调参数设置
  899. */
  900. @property (nonatomic, strong) NSDictionary * callbackParam;
  901. /**
  902. server回调变量设置
  903. */
  904. @property (nonatomic, strong) NSDictionary * callbackVar;
  905. /**
  906. 完成分块上传附带的请求头
  907. */
  908. @property (nonatomic, strong) NSDictionary * completeMetaHeader;
  909. @end
  910. /**
  911. 完成分块上传请求的结果
  912. */
  913. @interface OSSCompleteMultipartUploadResult : OSSResult
  914. /**
  915. 新创建Object的URL。
  916. */
  917. @property (nonatomic, strong) NSString * location;
  918. /**
  919. ETag (entity tag) 在每个Object生成的时候被创建,用于标示一个Object的内容。
  920. Complete Multipart Upload请求创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。.
  921. */
  922. @property (nonatomic, strong) NSString * eTag;
  923. /**
  924. 如果设置了server回调,回调的响应内容
  925. */
  926. @property (nonatomic, strong) NSString * serverReturnJsonString;
  927. @end
  928. /**
  929. 罗列某次分块上传事件已经上传的分块请求
  930. */
  931. @interface OSSListPartsRequest : OSSRequest
  932. /**
  933. Bucket名称
  934. */
  935. @property (nonatomic, strong) NSString * bucketName;
  936. /**
  937. Object名称
  938. */
  939. @property (nonatomic, strong) NSString * objectKey;
  940. /**
  941. 唯一标示此次Multipart Upload事件的ID。
  942. */
  943. @property (nonatomic, strong) NSString * uploadId;
  944. /**
  945. 返回请求中最大的Part数目。
  946. */
  947. @property (nonatomic, assign) int maxParts;
  948. /**
  949. 指定List的起始位置,只有Part Number数目大于该参数的Part会被列出。
  950. */
  951. @property (nonatomic, assign) int partNumberMarker;
  952. @end
  953. /**
  954. 罗列分块请求的结果
  955. */
  956. @interface OSSListPartsResult : OSSResult
  957. /**
  958. 如果本次没有返回全部结果,响应请求中将包含NextPartNumberMarker元素,用于标明接下来请求的PartNumberMarker值。
  959. */
  960. @property (nonatomic, assign) int nextPartNumberMarker;
  961. /**
  962. 返回请求中最大的Part数目。
  963. */
  964. @property (nonatomic, assign) int maxParts;
  965. /**
  966. 标明是否本次返回的List Part结果列表被截断。“true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。
  967. */
  968. @property (nonatomic, assign) BOOL isTruncated;
  969. /**
  970. 保存Part信息的容器。
  971. */
  972. @property (nonatomic, strong) NSArray * parts;
  973. @end
  974. /**
  975. 取消分块上传事件请求
  976. */
  977. @interface OSSAbortMultipartUploadRequest : OSSRequest
  978. /**
  979. Bucket名称
  980. */
  981. @property (nonatomic, strong) NSString * bucketName;
  982. /**
  983. Object名称
  984. */
  985. @property (nonatomic, strong) NSString * objectKey;
  986. /**
  987. 唯一标示此次Multipart Upload事件的ID。
  988. */
  989. @property (nonatomic, strong) NSString * uploadId;
  990. @end
  991. /**
  992. 取消分块上传事件的结果
  993. */
  994. @interface OSSAbortMultipartUploadResult : OSSResult
  995. @end
  996. /**
  997. 断点续传请求
  998. */
  999. @interface OSSResumableUploadRequest : OSSRequest
  1000. /**
  1001. 一个续传事件对应着同一个唯一的UploadId
  1002. */
  1003. @property (nonatomic, strong) NSString * uploadId;
  1004. /**
  1005. Bucket名称
  1006. */
  1007. @property (nonatomic, strong) NSString * bucketName;
  1008. /**
  1009. Object名称
  1010. */
  1011. @property (nonatomic, strong) NSString * objectKey;
  1012. /**
  1013. 从文件上传时,通过这个字段设置
  1014. */
  1015. @property (nonatomic, strong) NSURL * uploadingFileURL;
  1016. /**
  1017. 自定义分块大小,最小100KB
  1018. */
  1019. @property (nonatomic, assign) int64_t partSize;
  1020. /**
  1021. 上传进度
  1022. 会在任务执行的后台线程被回调,而非UI线程
  1023. */
  1024. @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadProgress;
  1025. /**
  1026. server回调参数设置
  1027. */
  1028. @property (nonatomic, strong) NSDictionary * callbackParam;
  1029. /**
  1030. server回调变量设置
  1031. */
  1032. @property (nonatomic, strong) NSDictionary * callbackVar;
  1033. /**
  1034. 完成分块上传附带的请求头
  1035. */
  1036. @property (nonatomic, strong) NSDictionary * completeMetaHeader;
  1037. /**
  1038. 当前正在处理的子请求
  1039. */
  1040. @property (atomic, weak) OSSRequest * runningChildrenRequest;
  1041. - (void)cancel;
  1042. @end
  1043. /**
  1044. 断点续传的结果
  1045. */
  1046. @interface OSSResumableUploadResult : OSSResult
  1047. /**
  1048. 如果设置了server回调,回调的响应内容
  1049. */
  1050. @property (nonatomic, strong) NSString * serverReturnJsonString;
  1051. @end
  1052. #pragma mark 其他
  1053. /**
  1054. HTTP响应内容解析器
  1055. */
  1056. @interface OSSHttpResponseParser : NSObject
  1057. @property (nonatomic, strong) NSURL * downloadingFileURL;
  1058. @property (nonatomic, copy) OSSNetworkingOnRecieveDataBlock onRecieveBlock;
  1059. - (instancetype)initForOperationType:(OSSOperationType)operationType;
  1060. - (void)consumeHttpResponse:(NSHTTPURLResponse *)response;
  1061. - (OSSTask *)consumeHttpResponseBody:(NSData *)data;
  1062. - (id)constructResultObject;
  1063. - (void)reset;
  1064. @end