QNBaseUpload.h 4.3 KB

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