封裝阿里上傳SDK

之前寫過一篇封裝七牛上傳SDK的文章,那我們今天就說說阿里的上傳SDK
因為公司的業(yè)務(wù)是短視頻方面的,相機拍攝用的是美攝,拍好后資源上傳至阿里。屬于視頻點播
點播視頻上傳

阿里推薦使用上傳地址和憑證上傳,為了安全性考慮,我們就使用憑證和地址進行上傳吧。不使用STS
首先我們先看下流程


圖片流程

首先我們要把我們要上傳的資源的路徑傳給我們自己的server,我們自己server 將從阿里那里拿到 上傳憑證和地址,這時會返回videoId,使用上傳地址和憑證上傳,上傳成功后是不會返回videoId的,需要我們自己記住。這點很重要。

#import <VODUpload/VODUploadClient.h>

NS_ASSUME_NONNULL_BEGIN

@interface FFAliyunUploadManager : NSObject

@property (nonatomic , copy)  void  (^uploadProgressBlock)(CGFloat progress);
@property (nonatomic , copy)  void  (^uploadFinishBlock)(NSString *videoId);
@property (nonatomic , copy)  void  (^upLoadFailBlock)(void);


@property (nonatomic , copy)  NSString  *videoId;
@property (nonatomic , copy)  NSString  *uploadAuth;
@property (nonatomic , copy)  NSString  *uploadAddress;

+(FFAliyunUploadManager *)shareManager;
- (void)uploadVideoWithFilePath:(NSString *)filePath andChallengeType:(FFUserChallengeModel *)challengeModel andDesc:(NSString *)desc;
@end



@interface FFAliyunUploadManager ()
@property (nonatomic , strong)   VODUploadClient *uploader;
@end

@implementation FFAliyunUploadManager

+(FFAliyunUploadManager *)shareManager{
    static FFAliyunUploadManager *sharedGlobalInstance = nil;
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        sharedGlobalInstance = [[self alloc] init];
    });
    return sharedGlobalInstance;
}



- (instancetype)init {
    self = [super init];
    if (self) {
        [self initWithConfig];
    }
    return self;
}

- (void)initWithConfig {
    _uploader = [VODUploadClient new];
    __weak VODUploadClient *weakClient = _uploader;
     __weak typeof(self) weakSelf = self;
    // 完成
    OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo,  VodUploadResult* result){
        NSLog(@"upload finished callback videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
        
        if (weakSelf.uploadFinishBlock) {
            weakSelf.uploadFinishBlock(weakSelf.videoId);
        }
    };
    
    // 失敗
    OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
        NSLog(@"upload failed callback code = %@, error message = %@", code, message);
    };
    
    // 進度
    OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
        if (weakSelf.uploadProgressBlock) {
            
            weakSelf.uploadProgressBlock(uploadedSize/totalSize);
        }
    };
    
    // token過期
    OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
        NSLog(@"upload token expired callback.");
        
        [weakSelf getNewUploadAuth];
        // token過期,設(shè)置新的STS,繼續(xù)上傳
//        [weakSelf.uploader resumeWithToken:`STS Key Id` accessKeySecret:`STS Key Secret` secretToken:`STS Secret Token` expireTime:`STS Expire Time`];
    };
    
    // 上傳開始重試回調(diào)
    OnUploadRertyListener RetryCallbackFunc = ^{
        NSLog(@"upload retry begin callback.");
    };
    //上傳結(jié)束重試,繼續(xù)上傳回調(diào)
    OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
        NSLog(@"upload retry end callback.");
    };
    
    //  開始上傳回調(diào)
    OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
        NSLog(@"upload upload started callback.");
        // 設(shè)置上傳地址和憑證
        [weakClient setUploadAuthAndAddress:fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];
    };
    
    // 回調(diào)的監(jiān)聽
    VODUploadListener *listener = [[VODUploadListener alloc] init];
    listener.finish = FinishCallbackFunc;
    listener.failure = FailedCallbackFunc;
    listener.progress = ProgressCallbackFunc;
    listener.expire = TokenExpiredCallbackFunc;
    listener.retry = RetryCallbackFunc;
    listener.retryResume = RetryResumeCallbackFunc;
    listener.started = UploadStartedCallbackFunc;
    // init with upload address and upload auth
    [self.uploader init:listener];
}

#pragma mark - 獲取最新的上傳憑證
- (void)getNewUploadAuth {
    [self.uploader resumeWithAuth:self.uploadAuth];
}



- (void)uploadVideoWithFilePath:(NSString *)filePath andChallengeType:(FFUserChallengeModel *)challengeModel andDesc:(NSString *)desc {
    VodInfo *vodInfo = [[VodInfo alloc] init];
    vodInfo.title = @"上傳測試";
    vodInfo.desc = @"這是上傳測試";
//    vodInfo.cateId = [NSNumber numberWithInteger:challengeModel.itemId.integerValue];
    vodInfo.cateId = @(2);
    vodInfo.tags = @"";
    [self.uploader addFile:filePath vodInfo:vodInfo];
    [self startUpload];
}



- (void)startUpload {
    [self.uploader start];
}

- (void)stopUpload {
    [self.uploader stop];
}


@end
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容