iOS 七牛云 利用隊(duì)列組 上傳多張圖片

七牛云每上傳一張圖片都要從服務(wù)端請(qǐng)求token,和key不能像阿里云那樣在客戶端sdk中設(shè)置路徑线欲。如果要上傳多張圖片,就要多次網(wǎng)絡(luò)請(qǐng)求减余,得到token后再上傳不脯。如果我要多張圖片全部上傳完再做某個(gè)操作府怯,就會(huì)很麻煩。

解決思路:
//創(chuàng)建隊(duì)列組
dispatch_group_t group = dispatch_group_create()防楷;
//創(chuàng)建隊(duì)列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//隊(duì)列中添加任務(wù)
dispatch_group_async(group, queue, ^{
})牺丙;
//隊(duì)列組結(jié)束通知
dispatch_group_notify(_group, dispatch_get_main_queue(), ^{
};

基本思路就是創(chuàng)建一個(gè)隊(duì)列組复局、一個(gè)隊(duì)列冲簿,然后循環(huán)添加上傳任務(wù)到隊(duì)列組中的隊(duì)列中去,然后全部結(jié)束后在隊(duì)列組的通知回調(diào)中去操作接下來的任務(wù)亿昏。

重點(diǎn):

通知group峦剔,下面的任務(wù)馬上要放到group中執(zhí)行了

dispatch_group_enter

通知group,任務(wù)完成了角钩,該任務(wù)要從group中移除了

dispatch_group_leave:

dispatch_group_async(group, queue, ^{
  //在這個(gè)方法中吝沫,如果執(zhí)行異步任務(wù),比如用網(wǎng)絡(luò)請(qǐng)求递礼,執(zhí)行請(qǐng)求后就算走完了惨险,不會(huì)等請(qǐng)求回調(diào)完成
  //這樣結(jié)束通知dispatch_group_notify就不準(zhǔn)確了
});

因此我們就要用到上面那兩個(gè)方法了脊髓,正確的做法是:

dispatch_group_t group = dispatch_group_create()辫愉;
//創(chuàng)建隊(duì)列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < images.count; i++) {
    dispatch_group_async(group, queue, ^{
          [self requestToken];
    });
}
- (void)requestToken {
    //在開始的時(shí)候標(biāo)記開始
    dispatch_group_enter(_group);

    [self.manager GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //獲取到token 和 key
        [weakSelf uploadWithToken:token key:key];
    }];
}

- (void)uploadWithToken:(NSString *)token key:(NSString *)key {

      if (!_upManager) {
      
      QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
         builder.zone = [QNZone zone1];
      }];
      
      _upManager = [[QNUploadManager alloc] initWithConfiguration:config];
   }
   
   [_upManager putData:imageData key:key token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
      
      //如果有失敗将硝,取消上傳中的option
      if (_isFailed) {
         
         [uploadOption cancellationSignal];
         
      }
      
      NSLog(@"%@",info);
      
      if (info.ok) {
         //結(jié)束的時(shí)候標(biāo)記結(jié)束
         dispatch_group_leave(group);
      }
      else {
         
         _isFailed = YES;
         
         NSLog(@"upload object failed, error: %@" , info.error);
         //結(jié)束的時(shí)候標(biāo)記結(jié)束
         dispatch_group_leave(group);
         
      }
      
   } option:uploadOption];
}

無(wú)論上傳成功還是失敗都要標(biāo)記結(jié)束恭朗,網(wǎng)絡(luò)請(qǐng)求失敗也要標(biāo)記結(jié)束(也可以當(dāng)嘗試n次請(qǐng)求后任然失敗后標(biāo)記),這樣以后我們就可以在

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
}袋哼;

這個(gè)方法中準(zhǔn)確的獲取到全部上傳結(jié)束的回調(diào)冀墨,我們可以在這個(gè)方法中做接下來的處理了闸衫。上面的代碼都只能算是偽代碼涛贯,實(shí)際開發(fā)中還要自己完善,以及添加一些邏輯比如上傳失敗蔚出,請(qǐng)求token失敗弟翘,最多嘗試次數(shù)等處理虫腋,主要知道這個(gè)流程和思路就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稀余,一起剝皮案震驚了整個(gè)濱河市悦冀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睛琳,老刑警劉巖盒蟆,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異师骗,居然都是意外死亡历等,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辟癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寒屯,“玉大人,你說我怎么就攤上這事黍少」鸭校” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵厂置,是天一觀的道長(zhǎng)菩掏。 經(jīng)常有香客問我,道長(zhǎng)农渊,這世上最難降的妖魔是什么患蹂? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮砸紊,結(jié)果婚禮上传于,老公的妹妹穿的比我還像新娘。我一直安慰自己醉顽,他們只是感情好沼溜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著游添,像睡著了一般系草。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唆涝,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天找都,我揣著相機(jī)與錄音,去河邊找鬼廊酣。 笑死能耻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晓猛,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饿幅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了戒职?” 一聲冷哼從身側(cè)響起栗恩,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洪燥,沒想到半個(gè)月后磕秤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捧韵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年亲澡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫版。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡床绪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出其弊,到底是詐尸還是另有隱情癞己,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布梭伐,位于F島的核電站痹雅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糊识。R本人自食惡果不足惜绩社,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赂苗。 院中可真熱鬧愉耙,春花似錦、人聲如沸拌滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)败砂。三九已至赌渣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昌犹,已是汗流浹背坚芜。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斜姥,地道東北人鸿竖。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓路操,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親千贯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,380評(píng)論 0 6
  • 1搞坝、OC中創(chuàng)建線程的方法是什么搔谴?如果指定在主線程中執(zhí)行代碼?如何延時(shí)執(zhí)行代碼桩撮《氐冢【難度系數(shù)★★】 1)創(chuàng)建線程的方法...
    木旁_G閱讀 1,958評(píng)論 2 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)店量,斷路器芜果,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,352評(píng)論 0 35
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理融师。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景右钾。SDWebImage的原...
    LZM輪回閱讀 2,007評(píng)論 0 12