iOS中AFN表單提交

文章首次整理發(fā)布個人博客一之筆:iOS中AFN表單提交

AFN 幾乎可以成為iOS開發(fā),網(wǎng)絡(luò)請求的終結(jié)者了技健,極大的方便了我們在開發(fā)中的網(wǎng)絡(luò)請求,我們在此基礎(chǔ)上都會做自己的一層或者多層封裝亩冬,盡可能使調(diào)用API更加方便务冕;即便如此,我們還是會遇到各種各樣的問題翘贮,比如415赊窥,3840,不支持的數(shù)據(jù)格式text/plain等等狸页。接下來锨能,就在最近,遇到了芍耘,需要“表單上傳”的API址遇;

表單FORM

Form(表單)對于每個WEB開發(fā)人員來說,應(yīng)該是再熟悉不過的東西了斋竞,通常也多用于Web中倔约,這里,我們不展開FROM的討論窃页,如果感興趣的話,可以看看這篇文章复濒,比較詳細了脖卖;
對于移動端來說,用的比較少巧颈;移動端常用的數(shù)據(jù)格式:@"application/json",@"text/json“畦木;

表單上傳圖片

最初接觸這個表單上傳是在APP中的圖片上傳,也就是砸泛,如何用AFN進行文件上傳十籍;搜了一下蛆封,搜到了如下文章:

1.iOS利用AFN框架來上傳圖片功能;
2.iOS開發(fā)之使用AFN上傳圖片;

以上兩篇文章基本就能解決上傳資源到公司服務(wù)器了;簡言之勾栗,就是下面的代碼

            // images:圖片對象數(shù)組
            AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
            manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"multipart/form-data", @"application/json", @"text/html", @"image/jpeg", @"image/png", @"application/octet-stream", @"text/json", nil];
            [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
                for (int i = 0; i < images.count; i++) {
                    UIImage *image = images[i];
                    NSData *imageData = UIImagePNGRepresentation(image);
                    // 在網(wǎng)絡(luò)開發(fā)中惨篱,上傳文件時,是文件不允許被覆蓋围俘,文件重名
                    // 要解決此問題砸讳,
                    // 可以在上傳時使用當(dāng)前的系統(tǒng)事件作為文件名
                    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
                    // 設(shè)置時間格式
                    [formatter setDateFormat:@"yyyyMMddHHmmss"];
                    NSString *dateString = [formatter stringFromDate:[NSDate date]];
                    NSString *fileName = [NSString  stringWithFormat:@"%@.png", dateString];
                    /*
                     *該方法的參數(shù)
                     1. appendPartWithFileData:要上傳的照片[二進制流]
                     2. name:對應(yīng)網(wǎng)站上[upload.php中]處理文件的字段(比如upload)
                     3. fileName:要保存在服務(wù)器上的文件名
                     4. mimeType:上傳的文件的類型
                     */
                    [formData appendPartWithFileData:imageData name:@"fs" fileName:fileName mimeType:@"image/png"];
                }
            } progress:^(NSProgress * _Nonnull uploadProgress) {
                
            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                if (self.successBlock) {
                    self.successBlock(responseObject);
                }
                [[LXNetworkHandler sharedInstance] removeItem:self];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                NSLog(@"上傳失敗: %@", error);
                if (self.failureBlock) {
                    self.failureBlock(error);
                }
                else {
                    
                }
            }];

POST 表單上傳

網(wǎng)上關(guān)于iOS表單POST請求的比較少,能谷歌到最多的就是界牡,文件上傳簿寂,API基本沒有的,我就嘗試著修改了下上面圖片上傳的封裝宿亡,因為常遂,本質(zhì)上都是表單上傳大的數(shù)據(jù),也就嘗試了一下挽荠,AFN是支持表單上傳的克胳;最初遇到這個問題,問了下Android同事咋處理的坤按,他自己拼的表單格式毯欣,也是厲害了,這里給個Android的參考:

image

OC這邊臭脓,就是對圖片上傳的接口修改下酗钞,拼接的參數(shù),代碼如下:
需要注意的是:我們后臺要求来累,這個items,是個json字符串砚作,因此,不能直接對數(shù)據(jù)上傳嘹锁,需要利用系統(tǒng)的方法葫录,序列化處理下:

  • [NSJSONSerialization dataWithJSONObject:items options:NSJSONWritingPrettyPrinted error:&error];
    完整的代碼如下:
           AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
            manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"multipart/form-data", @"application/json", @"text/html", @"image/jpeg", @"image/png", @"application/octet-stream", @"text/json", nil];
            [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
                NSError *error = nil;
                NSData *jsonData = [NSJSONSerialization dataWithJSONObject:items options:NSJSONWritingPrettyPrinted error:&error];
                [formData appendPartWithFormData:jsonData name:@"items"];
            } progress:^(NSProgress * _Nonnull uploadProgress) {
                
            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                if (self.successBlock) {
                    self.successBlock(responseObject);
                }
                [[LXNetworkHandler sharedInstance] removeItem:self];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                NSLog(@"上傳失敗: %@", error);
                if (self.failureBlock) {
                    self.failureBlock(error);
                }
                else {
                    
                }
                [[LXNetworkHandler sharedInstance] removeItem:self];
            }];

以上就是利用POST請求,封裝表單上傳的應(yīng)用领猾,歡迎留言討論米同;謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摔竿,一起剝皮案震驚了整個濱河市面粮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌继低,老刑警劉巖熬苍,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡柴底,警方通過查閱死者的電腦和手機婿脸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柄驻,“玉大人狐树,你說我怎么就攤上這事≡浼撸” “怎么了褪迟?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長答憔。 經(jīng)常有香客問我味赃,道長,這世上最難降的妖魔是什么虐拓? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任心俗,我火速辦了婚禮,結(jié)果婚禮上蓉驹,老公的妹妹穿的比我還像新娘城榛。我一直安慰自己,他們只是感情好态兴,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布狠持。 她就那樣靜靜地躺著,像睡著了一般瞻润。 火紅的嫁衣襯著肌膚如雪喘垂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天绍撞,我揣著相機與錄音正勒,去河邊找鬼。 笑死傻铣,一個胖子當(dāng)著我的面吹牛章贞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播非洲,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼鸭限,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了两踏?” 一聲冷哼從身側(cè)響起败京,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缆瓣,沒想到半個月后喧枷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虹统,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡弓坞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年隧甚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渡冻。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡戚扳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出族吻,到底是詐尸還是另有隱情帽借,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布超歌,位于F島的核電站砍艾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巍举。R本人自食惡果不足惜脆荷,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懊悯。 院中可真熱鬧蜓谋,春花似錦、人聲如沸炭分。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捧毛。三九已至观堂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岖妄,已是汗流浹背型将。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荐虐,地道東北人七兜。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像福扬,于是被迫代替她去往敵國和親腕铸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫铛碑、插件狠裹、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評論 4 62
  • 秋天到來了, 樹葉變黃了汽烦,一片片樹葉掉下來涛菠。像一只只蝴蝶飛向我們我 。看那柳樹的樹葉還是綠色的俗冻。怎么樣才能留住綠色...
    馬若維閱讀 357評論 0 0
  • 體檢礁叔,也有很多人沒有體檢。夲來迄薄,我是打算下個月交辭工書琅关,這樣3月二十日準時離廠,但我還是體檢了讥蔽,為了自已的健康涣易。 ...
    6e9c1462d480閱讀 121評論 0 0
  • 前幾天看電視上一位傳統(tǒng)藝術(shù)繼承者說自己在每做一件作品期間都非常充實,每天都按部就班地創(chuàng)作冶伞,但作品一旦做完新症,就會突然...
    過眼耳走心思閱讀 240評論 0 1
  • 看到秋日暖陽中的銀杏葉的作品金抡,按耐不住瀑焦,畫了這個。@秋日暖陽中的銀杏葉
    Flying_Sands閱讀 727評論 4 3