七牛文件批量上傳

QiNiu.png

七牛文件上傳的過程,如下圖所示

QiNiu-Progress.png

如果你不是很熟悉七牛SDK的集成過程,這里給您一點提示: cocoaPods podfile pod 'Qiniu' 引入七牛SDK文件.

 過程如下:@1  獲取上傳文件到七牛的token,即用戶權(quán)限。 
         @2   引用七牛SDK中文件方法,上傳文件,上傳成功和失敗皆是有回調(diào)數(shù)據(jù)的。

       QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:nil progressHandler:progress params:nil checkCrc:NO cancellationSignal:nil];
       QNUploadManager *uploadManager = [[QNUploadManager alloc]initWithRecorder:nil];
       [uploadManager putData:data key:nil token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
        if (info.statusCode == 200 && resp) {
            NSString *url;
                url = [NSString stringWithFormat:@"%@%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"token"], resp[@"key"]];
           
            if (success) {
                success(url);
            }
        } else {
            if (failure) {
                failure();
            }
        }
      } option:opt];

下邊給出批量上傳的方法:
該類用于接收成功和失敗的回調(diào)
#import <Foundation/Foundation.h>
@interface QiNiuUploadHelper : NSObject
/**
* 成功回調(diào)
*/
@property (copy, nonatomic) void (^singleSuccessBlock)(NSString *);

   /**
    *  失敗回調(diào)
    */
   @property (copy, nonatomic) void (^singleFailureBlock)();

   + (instancetype)sharedInstance;
   @end

.m實現(xiàn)方式
#import "QiNiuUploadHelper.h"
static QiNiuUploadHelper *_sharedInstance ;

    @implementation QiNiuUploadHelper

   + (instancetype)sharedInstance {
           static dispatch_once_t onceToken;
           dispatch_once(&onceToken, ^{
                _sharedInstance = [[QiNiuUploadHelper alloc] init];
           });
           return _sharedInstance;
    }

    -(id)copyWithZone:(NSZone *)zone{
                return _sharedInstance;
    }

   +(id)allocWithZone:(struct _NSZone *)zone{
              static dispatch_once_t onceToken;
              dispatch_once(&onceToken, ^{
                       _sharedInstance = [super allocWithZone:zone];
              });
             return _sharedInstance;
    }
  @end

批量上傳的具體調(diào)用方法API

  #import <Foundation/Foundation.h>
  #import <UIKit/UIKit.h>
  #import "QiniuSDK.h"

  @interface QiNiuSystemService : NSObject

  /**
    *  上傳圖片
    *
    *  @param image    需要上傳的image
    *  @param progress 上傳進度block
    *  @param success  成功block 返回url地址
    *  @param failure  失敗block
    */
  + (void)uploadImage:(UIImage *)image
       progress:(QNUpProgressHandler)progress
        success:(void (^)(NSString *url))success
        failure:(void (^)())failure;

  /**
     *   上傳多張圖片,按隊列依次上傳
     *
     *  @param imageArray 存放image的數(shù)字
     *  @param progress   上傳到七牛的進度
     *  @param success    成功block  返回key
     *  @param failure    失敗block
     */
  + (void)uploadImages:(NSArray *)imageArray
        progress:(void (^)(CGFloat))progress
         success:(void (^)(NSArray *))success
         failure:(void (^)())failure;

  /**
     *  獲取七牛上傳token
     *
     *  @param success 成功block  返回token
     *  @param failure 失敗block
     */
   + (void)qiNiuUploadToken:(void (^)(NSString *token))success failure:(void (^)())failure;

  /**
     *  獲取七牛上傳成功的key
     *
     *  @param key     上傳成功之后返回圖片對應的key
     *  @param success 成功block 返回url地址
     *  @param failure 失敗block
     */
  + (void)qiNiuUrlkey:(NSString *)key success:(void (^)(NSString *url))success failure:(void (^)())failure;

   /**
      *  獲取七牛上傳成功的成功后服務端返回的url
      *
      *  @param keyArray 上傳成功之后返回圖片對應的key數(shù)組
      *  @param success  成功block 返回url地址數(shù)組
      *  @param failure  失敗block
      */
 + (void)qiNiuUrlKeyArray:(NSArray *)keyArray success:(void (^)(NSArray *array))success failure:(void (^)())failure;


  /**
     *  將圖片壓縮為需要的比例
     *
     *  @param  image 需要處理的圖片
     *  @param  size  圖片返回大小
     *
     *  @return image
     */
  +(UIImage*)originImage:(UIImage *)image scaleToSize:(CGSize)size;

  @end

具體的.m實現(xiàn):
#import "QiNiuSystemService.h"
#import "QiNiuUploadHelper.h"
#import "HotelRequest.h"
#import "QiniuSDK.h"
@implementation QiNiuSystemService

  + (void)uploadImage:(UIImage *)image progress:(QNUpProgressHandler)progress success:(void (^)(NSString *url))success failure:(void (^)())failure{
[QiNiuSystemService getQiniuUploadToken:^(NSString *token) {
    
    UIImage *sizedImage = [QiNiuSystemService OriginImage:image scaleToSize:CGSizeMake(1000, 1000) ];
    NSData *data = UIImageJPEGRepresentation(sizedImage, 0.3);
    if (!data) {
        if (failure) {
            failure();
        }
        return;
    }
    
    QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:nil progressHandler:progress params:nil checkCrc:NO cancellationSignal:nil];
    QNUploadManager *uploadManager = [[QNUploadManager alloc]initWithRecorder:nil];
    [uploadManager putData:data key:nil token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
        if (info.statusCode == 200 && resp) {
            NSString *url;
                url = [NSString stringWithFormat:@"%@%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"token"], resp[@"key"]];
           
            if (success) {
                success(url);
            }
        }
        else {
            if (failure) {
                failure();
            }
        }
    } option:opt];
} failure:^{
    if (failure) {
        failure();
    }
}];
}

 //上傳圖片
 + (void)uploadImages:(NSArray *)imageArray progress:(void (^)(CGFloat))progress success:(void (^)(NSArray *))success failure:(void (^)())failure{
NSMutableArray *array = [[NSMutableArray alloc] init];

__block float totalProgress = 0.0f;
__block float partProgress = 1.0f / [imageArray count];
__block NSUInteger currentIndex = 0;

QiNiuUploadHelper *uploadHelper = [QiNiuUploadHelper sharedInstance];
__weak typeof(uploadHelper) weakHelper = uploadHelper;

uploadHelper.singleFailureBlock = ^() {
    failure();
    return;
};
uploadHelper.singleSuccessBlock  = ^(NSString *url) {
    [array addObject:url];
    totalProgress += partProgress;
    progress(totalProgress);
    currentIndex++;
    if ([array count] == [imageArray count]) {
        success([array copy]);
        return;
    }
    else {
        [QiNiuSystemService uploadImage:imageArray[currentIndex] progress:nil success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];
    }
};

[QiNiuSystemService uploadImage:imageArray[0] progress:nil success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];
}

 //獲取七牛的token
+ (void)qiNiuUploadToken:(void (^)(NSString *))success failure:(void (^)())failure{
[HotelRequest  requestHotelPicwindinfoManager:[HttpRequest requestOperationManager]
                                      success:^(id responseObject) {
                                        NSString * token = [NSString stringWithFormat:@"%@",responseObject[@"picwindinfo"]];
                                          if (success) {
                                              success(token);
                                          }
             
} failure:^(NSOperation *operation, NSError *error) {
    if (failure) {
        failure();
    }
}];
}
// 獲取七牛上傳成功的key

+ (void)qiNiuUrlkey:(NSString *)key success:(void (^)(NSString *url))success failure:(void (^)())failure{

[HotelRequest requestHotelSubjectPicPathChangeWithPicpath:key
                                                  manager:[HttpRequest requestOperationManager]
                                                  success:^(id responseObject) {
                                                      
                                                      NSString *picUrl = responseObject[@"picurl"];
                                                      if (success) {
                                                          success(picUrl);
                                                      }
                                                   
                                                  } failure:^(NSOperation *operation, NSError *error) {
                                                      if (failure) {
                                                          failure();
                                                      }
                                                  }];
  }

 // 獲取七牛上傳成功的成功后服務端返回的url
+ (void)qiNiuUrlKeyArray:(NSArray *)keyArray success:(void (^)(NSArray *array))success failure:(void (^)())failure{
NSMutableArray *UrlArray = [[NSMutableArray alloc] init];

__block NSUInteger currentIndex = 0;
QiNiuUploadHelper *uploadHelper = [QiNiuUploadHelper sharedInstance];
__weak typeof(uploadHelper) weakHelper = uploadHelper;

uploadHelper.singleFailureBlock = ^() {
    failure();
    return;
};
uploadHelper.singleSuccessBlock  = ^(NSString *url) {
    [UrlArray addObject:url];
    currentIndex++;
    if ([UrlArray count] == [keyArray count]) {
        success([UrlArray copy]);
        return;
    }
    else {
        [QiNiuSystemService getQiniuUrlkey:url success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];
    }
};

[QiNiuSystemService getQiniuUrlkey:keyArray[0] success:weakHelper.singleSuccessBlock failure:weakHelper.singleFailureBlock];
}
  //壓縮上傳圖片的大小比例
+ (UIImage*)originImage:(UIImage *)image scaleToSize:(CGSize)size{
UIGraphicsBeginImageContext(size);  //size 為CGSize類型,即你所需要的圖片尺寸

[image drawInRect:CGRectMake(0, 0, size.width, size.height)];

UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return scaledImage;   //返回的就是已經(jīng)改變的圖片
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 前言: 前陣子遇到七牛文件批量上傳的問題,嘗試了幾種方案,現(xiàn)分享一種目前采用的方案——自定義operation。 ...
    wentianen閱讀 858評論 0 7
  • 項目組件化、平臺化是技術(shù)公司的共同目標,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構(gòu)...
    swu_luo閱讀 22,860評論 0 39
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,138評論 25 708
  • 看標題大家應該已經(jīng)知道了,我要說的是感情的事情。早上醒來看朋友圈知道了這個軟件,就下載下來用它記錄一些文字,現(xiàn)在葛...
    流浪狗在街頭徘徊閱讀 397評論 0 0
  • 近些天公司出了個賊,女職工掛在陽臺上的內(nèi)衣常不翼而飛。 資料室的小喬就為此事十分苦惱,她丟了三件‘維多...
    危險份子閱讀 339評論 0 0

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