最近公司項(xiàng)目涉及多圖上傳到問(wèn)題谆级,簡(jiǎn)單的說(shuō)一下解決思路罢浇。
項(xiàng)目圖片是在保存到七牛服務(wù)器,但是七牛只支持單圖上傳扛门,單圖上傳很簡(jiǎn)單就可以解決鸠信。多圖上傳:我的思路是使用for循環(huán),嘗試了一下成功了尖飞,問(wèn)題貌似解決了症副,可接下來(lái)的問(wèn)題又來(lái)了店雅,圖片的上傳循序和自己想的完全不一樣。解決這個(gè)問(wèn)題贞铣,首先想到的是用線程同步來(lái)解決這個(gè)問(wèn)題闹啦,那么問(wèn)題又來(lái)了,這樣效率不能得到保證辕坝,果斷放棄窍奋。回頭又給七牛官方文檔詳細(xì)的啃了一遍酱畅,雖然七牛沒(méi)有提供多圖上傳的api琳袄,但是,官方給了這樣一段話:
屏幕快照 2017-12-04 下午7.18.54.png
QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:@"text/plain" progressHandler:nil params:@{ @"x:foo":@"fooval" } checkCrc:YES cancellationSignal:nil];
[upManager putData:data key:@"hello" token:token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
NSLog(@"%@", info);
NSLog(@"%@", resp);
} option:opt];
看了這段話頓時(shí)醒悟纺酸,隨即在七牛又封裝了一個(gè)這樣的方法:
-(void)toUpLoadFiles:(NSData*)data withIndex:(NSString *) index
successBlock:(qiNiuSuccessBlock)successBlock
failBlock:(qiNiufailBlock)failBlock {
NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval a=[dat timeIntervalSince1970]*1000;
NSString *timeString = [NSString stringWithFormat:@"%.0f", a];
QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:@"text/plain" progressHandler:nil params:@{ @"x:index":index } checkCrc:YES cancellationSignal:nil];
__weak typeof(self) weakSelf = self;
[self.upManager putData:data key:[NSString stringWithFormat:@"img_%@",timeString] token:self.token
complete: ^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
if (info.statusCode==401) {
//token過(guò)期
weakSelf.token = nil;
[weakSelf getQiNiuToken:data successBlock:successBlock failBlock:failBlock];
return;
}
successBlock(info,key,resp,weakSelf.url);
} option:opt];
}
在原來(lái)上傳單張圖片的方法里面添加一個(gè)參數(shù):index(圖片上傳的順序)窖逗,再使用for循環(huán)上傳圖片,index即是傳入的for循環(huán)的循環(huán)變量餐蔬,這樣既解決了多圖上傳的問(wèn)題碎紊,同時(shí)又解決了上傳效率問(wèn)題。
需要注意的是:圖片上傳是異步上傳的圖片的順序現(xiàn)在還是混亂的樊诺,我們已經(jīng)對(duì)上傳的圖片使用index進(jìn)行了標(biāo)注仗考,需要我們將上傳的圖片存到一個(gè)數(shù)組中按照index進(jìn)行再次排序,上代碼:
屏幕快照 2017-12-04 下午7.33.31.png
持續(xù)更新~