基于AFN3.x的圖片上傳

圖片上傳基本在每個(gè)App上都會(huì)用到,經(jīng)常用到的有兩種方式们何,一種方式是base64字符串上傳圖片萄焦,另一種方式是使用二進(jìn)制流進(jìn)行上傳圖片,我個(gè)人比較喜歡使用二進(jìn)制流上傳垂蜗,這種方式無(wú)論是上傳單張圖片還是多張圖片楷扬,速度都比較快的。
下面分別介紹一下使用AFN3.x如何進(jìn)行單張和多張圖片的上傳:

1贴见、單張圖片上傳

首先烘苹,初始化AFHTTPSessionManager,并做相關(guān)屬性的配置:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:@"服務(wù)器地址"];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];//請(qǐng)求
manager.responseSerializer = [AFHTTPResponseSerializer serializer];//響應(yīng)
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
manager.requestSerializer.timeoutInterval = 30;//超時(shí)時(shí)間

然后提前設(shè)置好要上傳的圖片的名稱(chēng)片部,一般以時(shí)間命名镣衡,便于區(qū)分:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 // 設(shè)置時(shí)間格式
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.png", str];

接下來(lái)將要上傳的圖片,轉(zhuǎn)為NSData類(lèi)型就可以上傳了

[manager POST:url parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
    NSData *data = UIImageJPEGRepresentation(image,0.5);//image為要上傳的圖片
    [formData appendPartWithFileData:data name:@"file" fileName:fileName  mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
        
 }success:^(NSURLSessionDataTask *task, id responseObject) {
    NSData *data = responseObject;
    NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"上傳成功 %@",dic);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    
}];

如果需要實(shí)時(shí)地獲取上傳的進(jìn)度档悠,直接在progress的block回調(diào)中獲取即可廊鸥。
到目前為止,單張圖片就可以順利的上傳了辖所,接下來(lái)惰说,說(shuō)一下如何上傳多張圖片

2、多張圖片上傳

多張圖片上傳和單張圖片上傳的思路基本上是一致的缘回,只不過(guò)在圖片命名的時(shí)候有一些區(qū)別吆视,而且這個(gè)區(qū)別非常重要,實(shí)踐證明:如果命名錯(cuò)誤的話(huà)酥宴,只會(huì)有一張圖片上傳成功啦吧。
前面就不贅述的,直接從上傳開(kāi)始說(shuō):

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 設(shè)置時(shí)間格式
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
[manager POST:url parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    [imageArr enumerateObjectsUsingBlock:^(UIImage * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UIImage *image = imageArr[idx];//圖片數(shù)組
        NSData *data = UIImageJPEGRepresentation(image,0.5);
        NSString *fileName = [NSString stringWithFormat:@"%@%ld.jpg", str,idx];
        [formData appendPartWithFileData:data name:[NSString stringWithFormat:@"List[%ld]",idx] fileName:fileName mimeType:@"image/jpeg"];
    }];
 } progress:^(NSProgress * _Nonnull uploadProgress) {
        
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSData *data = responseObject;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"上傳成功:%@",dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

大家要注意:我所說(shuō)的文件名稱(chēng)不一樣拙寡,指的并不是fileName授滓,而是name,List為后臺(tái)指定的圖片文件的參數(shù)名肆糕,多張圖片使用“[]+數(shù)字”的方式進(jìn)行命名即可般堆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市擎宝,隨后出現(xiàn)的幾起案子郁妈,更是在濱河造成了極大的恐慌,老刑警劉巖绍申,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡极阅,警方通過(guò)查閱死者的電腦和手機(jī)胃碾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筋搏,“玉大人仆百,你說(shuō)我怎么就攤上這事”计辏” “怎么了俄周?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)髓迎。 經(jīng)常有香客問(wèn)我峦朗,道長(zhǎng),這世上最難降的妖魔是什么排龄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任波势,我火速辦了婚禮,結(jié)果婚禮上橄维,老公的妹妹穿的比我還像新娘尺铣。我一直安慰自己,他們只是感情好争舞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布凛忿。 她就那樣靜靜地躺著,像睡著了一般竞川。 火紅的嫁衣襯著肌膚如雪店溢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天流译,我揣著相機(jī)與錄音逞怨,去河邊找鬼。 笑死福澡,一個(gè)胖子當(dāng)著我的面吹牛叠赦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播革砸,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼除秀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了算利?” 一聲冷哼從身側(cè)響起册踩,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎效拭,沒(méi)想到半個(gè)月后暂吉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胖秒,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年慕的,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阎肝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肮街,死狀恐怖风题,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫉父,我是刑警寧澤沛硅,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站绕辖,受9級(jí)特大地震影響摇肌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜引镊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一朦蕴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弟头,春花似錦吩抓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至伦连,卻和暖如春雨饺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惑淳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工额港, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歧焦。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓移斩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绢馍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子向瓷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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