QNBaseUpload.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //
  2. // QNBaseUpload.h
  3. // QiniuSDK
  4. //
  5. // Created by WorkSpace_Sun on 2020/4/19.
  6. // Copyright © 2020 Qiniu. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "QNConfiguration.h"
  10. #import "QNCrc32.h"
  11. #import "QNRecorderDelegate.h"
  12. #import "QNSessionManager.h"
  13. #import "QNUpToken.h"
  14. #import "QNUrlSafeBase64.h"
  15. #import "QNAsyncRun.h"
  16. #import "QNUploadManager.h"
  17. #import "QNUploadOption.h"
  18. #import "QNZone.h"
  19. #import "QNFileDelegate.h"
  20. #import "QNUploadRequestMetrics.h"
  21. typedef void (^QNUpTaskCompletionHandler)(QNResponseInfo *info, NSString *key, QNUploadTaskMetrics *metrics, NSDictionary *resp);
  22. @interface QNBaseUpload : NSObject
  23. @property (nonatomic, copy, readonly) NSString *key;
  24. @property (nonatomic, copy, readonly) NSString *fileName;
  25. @property (nonatomic, strong, readonly) NSData *data;
  26. @property (nonatomic, strong, readonly) id <QNFileDelegate> file;
  27. @property (nonatomic, strong, readonly) QNUpToken *token;
  28. @property (nonatomic, strong, readonly) QNUploadOption *option;
  29. @property (nonatomic, strong, readonly) QNConfiguration *config;
  30. @property (nonatomic, strong, readonly) id <QNRecorderDelegate> recorder;
  31. @property (nonatomic, copy, readonly) NSString *recorderKey;
  32. @property (nonatomic, strong, readonly) QNUpTaskCompletionHandler completionHandler;
  33. @property (nonatomic, strong, readonly) QNUploadRegionRequestMetrics *currentRegionRequestMetrics;
  34. @property (nonatomic, strong, readonly) QNUploadTaskMetrics *metrics;
  35. //MARK:-- 构造函数
  36. /// file构造函数
  37. /// @param file file信息
  38. /// @param key 上传key
  39. /// @param token 上传token
  40. /// @param option 上传option
  41. /// @param config 上传config
  42. /// @param recorder 断点续传记录信息
  43. /// @param recorderKey 断电上传信息保存的key值,需确保唯一性
  44. /// @param completionHandler 上传完成回调
  45. - (instancetype)initWithFile:(id<QNFileDelegate>)file
  46. key:(NSString *)key
  47. token:(QNUpToken *)token
  48. option:(QNUploadOption *)option
  49. configuration:(QNConfiguration *)config
  50. recorder:(id<QNRecorderDelegate>)recorder
  51. recorderKey:(NSString *)recorderKey
  52. completionHandler:(QNUpTaskCompletionHandler)completionHandler;
  53. /// data 构造函数
  54. /// @param data 上传data流
  55. /// @param key 上传key
  56. /// @param fileName 上传fileName
  57. /// @param token 上传token
  58. /// @param option 上传option
  59. /// @param config 上传config
  60. /// @param completionHandler 上传完成回调
  61. - (instancetype)initWithData:(NSData *)data
  62. key:(NSString *)key
  63. fileName:(NSString *)fileName
  64. token:(QNUpToken *)token
  65. option:(QNUploadOption *)option
  66. configuration:(QNConfiguration *)config
  67. completionHandler:(QNUpTaskCompletionHandler)completionHandler;
  68. /// 初始化数据
  69. - (void)initData;
  70. //MARK:-- 上传
  71. /// 开始上传流程
  72. - (void)run;
  73. /// 准备上传
  74. - (int)prepareToUpload;
  75. /// 开始上传
  76. - (void)startToUpload;
  77. /// 切换区域
  78. - (BOOL)switchRegionAndUpload;
  79. // 根据错误信息进行切换region并上传,return:是否切换region并上传
  80. - (BOOL)switchRegionAndUploadIfNeededWithErrorResponse:(QNResponseInfo *)errorResponseInfo;
  81. /// 上传结束调用回调方法,在上传结束时调用,该方法内部会调用回调,已通知上层上传结束
  82. /// @param info 上传返回信息
  83. /// @param response 上传字典信息
  84. - (void)complete:(QNResponseInfo *)info
  85. response:(NSDictionary *)response;
  86. //MARK: -- 机房管理
  87. /// 在区域列表头部插入一个区域
  88. - (void)insertRegionAtFirst:(id <QNUploadRegion>)region;
  89. /// 切换区域
  90. - (BOOL)switchRegion;
  91. /// 获取目标区域
  92. - (id <QNUploadRegion>)getTargetRegion;
  93. /// 获取当前区域
  94. - (id <QNUploadRegion>)getCurrentRegion;
  95. //MARK: -- upLog
  96. // 一个上传流程可能会发起多个上传操作(如:上传多个分片),每个上传操作均是以一个Region的host做重试操作
  97. - (void)addRegionRequestMetricsOfOneFlow:(QNUploadRegionRequestMetrics *)metrics;
  98. @end