127 lines
4.3 KiB
Objective-C
127 lines
4.3 KiB
Objective-C
//
|
||
// QNBaseUpload.h
|
||
// QiniuSDK
|
||
//
|
||
// Created by WorkSpace_Sun on 2020/4/19.
|
||
// Copyright © 2020 Qiniu. All rights reserved.
|
||
//
|
||
|
||
#import <Foundation/Foundation.h>
|
||
#import "QNConfiguration.h"
|
||
#import "QNCrc32.h"
|
||
#import "QNRecorderDelegate.h"
|
||
#import "QNUpToken.h"
|
||
#import "QNUrlSafeBase64.h"
|
||
#import "QNAsyncRun.h"
|
||
#import "QNUploadManager.h"
|
||
#import "QNUploadOption.h"
|
||
#import "QNZone.h"
|
||
#import "QNUploadSource.h"
|
||
#import "QNUploadRequestMetrics.h"
|
||
|
||
extern NSString *const QNUploadUpTypeForm;
|
||
extern NSString *const QNUploadUpTypeResumableV1;
|
||
extern NSString *const QNUploadUpTypeResumableV2;
|
||
|
||
typedef void (^QNUpTaskCompletionHandler)(QNResponseInfo *info, NSString *key, QNUploadTaskMetrics *metrics, NSDictionary *resp);
|
||
|
||
@interface QNBaseUpload : NSObject
|
||
|
||
@property (nonatomic, copy, readonly) NSString *upType;
|
||
@property (nonatomic, copy, readonly) NSString *key;
|
||
@property (nonatomic, copy, readonly) NSString *fileName;
|
||
@property (nonatomic, strong, readonly) NSData *data;
|
||
@property (nonatomic, strong, readonly) id <QNUploadSource> uploadSource;
|
||
@property (nonatomic, strong, readonly) QNUpToken *token;
|
||
@property (nonatomic, strong, readonly) QNUploadOption *option;
|
||
@property (nonatomic, strong, readonly) QNConfiguration *config;
|
||
@property (nonatomic, strong, readonly) id <QNRecorderDelegate> recorder;
|
||
@property (nonatomic, copy, readonly) NSString *recorderKey;
|
||
@property (nonatomic, strong, readonly) QNUpTaskCompletionHandler completionHandler;
|
||
|
||
@property (nonatomic, strong, readonly) QNUploadRegionRequestMetrics *currentRegionRequestMetrics;
|
||
@property (nonatomic, strong, readonly) QNUploadTaskMetrics *metrics;
|
||
|
||
|
||
//MARK:-- 构造函数
|
||
|
||
/// file构造函数
|
||
/// @param uploadSource 文件源
|
||
/// @param key 上传key
|
||
/// @param token 上传token
|
||
/// @param option 上传option
|
||
/// @param config 上传config
|
||
/// @param recorder 断点续传记录信息
|
||
/// @param recorderKey 断电上传信息保存的key值,需确保唯一性
|
||
/// @param completionHandler 上传完成回调
|
||
- (instancetype)initWithSource:(id<QNUploadSource>)uploadSource
|
||
key:(NSString *)key
|
||
token:(QNUpToken *)token
|
||
option:(QNUploadOption *)option
|
||
configuration:(QNConfiguration *)config
|
||
recorder:(id<QNRecorderDelegate>)recorder
|
||
recorderKey:(NSString *)recorderKey
|
||
completionHandler:(QNUpTaskCompletionHandler)completionHandler;
|
||
|
||
/// data 构造函数
|
||
/// @param data 上传data流
|
||
/// @param key 上传key
|
||
/// @param fileName 上传fileName
|
||
/// @param token 上传token
|
||
/// @param option 上传option
|
||
/// @param config 上传config
|
||
/// @param completionHandler 上传完成回调
|
||
- (instancetype)initWithData:(NSData *)data
|
||
key:(NSString *)key
|
||
fileName:(NSString *)fileName
|
||
token:(QNUpToken *)token
|
||
option:(QNUploadOption *)option
|
||
configuration:(QNConfiguration *)config
|
||
completionHandler:(QNUpTaskCompletionHandler)completionHandler;
|
||
|
||
/// 初始化数据
|
||
- (void)initData;
|
||
|
||
//MARK: -- 上传
|
||
|
||
/// 开始上传流程
|
||
- (void)run;
|
||
|
||
/// 准备上传
|
||
- (int)prepareToUpload;
|
||
|
||
/// 重新加载上传数据
|
||
- (BOOL)reloadUploadInfo;
|
||
|
||
/// 开始上传
|
||
- (void)startToUpload;
|
||
|
||
/// 切换区域
|
||
- (BOOL)switchRegionAndUpload;
|
||
// 根据错误信息进行切换region并上传,return:是否切换region并上传
|
||
- (BOOL)switchRegionAndUploadIfNeededWithErrorResponse:(QNResponseInfo *)errorResponseInfo;
|
||
|
||
/// 上传结束调用回调方法,在上传结束时调用,该方法内部会调用回调,已通知上层上传结束
|
||
/// @param info 上传返回信息
|
||
/// @param response 上传字典信息
|
||
- (void)complete:(QNResponseInfo *)info
|
||
response:(NSDictionary *)response;
|
||
|
||
//MARK: -- 机房管理
|
||
|
||
/// 在区域列表头部插入一个区域
|
||
- (void)insertRegionAtFirst:(id <QNUploadRegion>)region;
|
||
/// 切换区域
|
||
- (BOOL)switchRegion;
|
||
/// 获取目标区域
|
||
- (id <QNUploadRegion>)getTargetRegion;
|
||
/// 获取当前区域
|
||
- (id <QNUploadRegion>)getCurrentRegion;
|
||
|
||
//MARK: -- upLog
|
||
|
||
// 一个上传流程可能会发起多个上传操作(如:上传多个分片),每个上传操作均是以一个Region的host做重试操作
|
||
- (void)addRegionRequestMetricsOfOneFlow:(QNUploadRegionRequestMetrics *)metrics;
|
||
|
||
@end
|