QNBaseUpload.h 4.0 KB

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