iOS里實(shí)現(xiàn)multipart/form-data格式上傳文件(多圖上傳抒倚,文件參數(shù)褐着,其他參數(shù))

最近做項(xiàng)目中有個(gè)后臺(tái)api上傳文件、是要求使用multipart/form-data格式上傳文件托呕。
然后找了下資料含蓉,發(fā)現(xiàn)很少,是要用系統(tǒng)自帶網(wǎng)絡(luò)請(qǐng)求才能實(shí)現(xiàn)multipart/form-data格式上傳项郊,AFNet沒(méi)有這樣的api馅扣。也在網(wǎng)上找了些資料然后自己整合了一下
、着降、差油、
+(void)PostSubmitiphotoWithText:(NSString *)text name:(NSString *)name AppID:(NSString *)AppID Image:(NSData *)image twoname:(NSString *)twoname imageArray:(NSMutableArray *)imageArray filename:(NSString *)filename completionHandler:(void(^)(NSData *data, NSError *error))completion
{

NSURL *url = [NSURL URLWithString:@"http://app.hy-chip.com/hyChip3/feedback/information"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
//設(shè)置請(qǐng)求實(shí)體
NSMutableData *body = [NSMutableData data];
 NSDate *date = [NSDate date];
 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
 NSString *time_now = [formatter stringFromDate:date];
 NSString *nameID = @"5";
 //4.設(shè)置請(qǐng)求體
 NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                text,           @"content",
                                @"799610809@qq.com",        @"contact",
                                time_now,       @"time",
                                nameID,         @"appId",
                                nil];
 
 NSMutableDictionary *dictParmater = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                      kAsign,           @"sign",
                                      @"1.4",           @"ver",
                                      params,           @"params",
                                      @"123456",        @"id",
                                      nil];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictParmater options:NSJSONWritingPrettyPrinted error:nil];
NSString*jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];

 NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@"" withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的換行符
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
//普通參數(shù)
[body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]];
//上傳參數(shù)需要key: (相應(yīng)參數(shù),在這里是_myModel.personID)
NSString *dispositions = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",@"content"];
[body appendData:[self getDataWithString:dispositions ]];
[body appendData:[self getDataWithString:@"\r\n"]];
[body appendData:[self getDataWithString:mutStr]];
[body appendData:[self getDataWithString:@"\r\n"]];

for (int i = 0; i<imageArray.count-1; i++) {
    //文件參數(shù)
    UIImage * img = imageArray[i];
    NSData *imageData = [NSData data];
    NSString *imageFormat = @"";
    imageFormat = @"Content-Type: image/jpeg \r\n";
    imageData = UIImageJPEGRepresentation(img,0.6);   //圖片壓縮
    
    [body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]];
    NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@.jpg\"\r\n",@"file",filename];
    [body appendData:[self getDataWithString:disposition ]];
    
    NSLog(@"%@___________",body);
    
    [body appendData:[self getDataWithString:imageFormat]];
[body appendData:[self getDataWithString:@"\r\n"]];
[body appendData:imageData];
[body appendData:[self getDataWithString:@"\r\n"]];
}


//參數(shù)結(jié)束
[body appendData:[self getDataWithString:@"--BOUNDARY--\r\n"]];
request.HTTPBody = body;
//設(shè)置請(qǐng)求體長(zhǎng)度
NSInteger length = [body length];
[request setValue:[NSString stringWithFormat:@"%ld",length] forHTTPHeaderField:@"Content-Length"];
//設(shè)置 POST請(qǐng)求文件上傳
[request setValue:@"multipart/form-data; boundary=BOUNDARY" forHTTPHeaderField:@"Content-Type"];


    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  // 當(dāng)請(qǐng)求結(jié)束的時(shí)候調(diào)用
        if (!data){
            NSLog(@"返回?cái)?shù)據(jù)為空-%@",data);
            return;
        }
        if (!connectionError) {

        }
        dispatch_async(dispatch_get_main_queue(), ^{
            completion(data,connectionError);

        });

    }];

}
任洞、蓄喇、、

然后上傳事件里面直接調(diào)用交掏,參數(shù)最好和后臺(tái)人員溝通對(duì)比一下妆偏。
///
for(NSInteger i = 0; i < imagesArray.count-1; i++)
{
//取出單張圖片二進(jìn)制數(shù)據(jù)
imageData = imagesArray[i];
// imageData = [NSKeyedArchiver archivedDataWithRootObject:imagesArray[i]]; //上傳一張照片成功
//imageData = UIImagePNGRepresentation(imagesArray[i]);
// 上傳的參數(shù)名,在服務(wù)器端保存文件的文件夾名
Name = [NSString stringWithFormat:@"%@%ld", imageData, i+1];
NSLog(@"Name------------%@",Name);
// 上傳filename
fileName = [NSString stringWithFormat:@"%@.jpg", Name];
NSLog(@"fileName------------%@",fileName);

    }
    
    [THFunCloud  PostSubmitiphotoWithText:self.textView.text name:@"799610809@qq.com"AppID:@"5"Image:imageData twoname:@"file"imageArray:imagesArray filename:fileName completionHandler:^(NSData *data, NSError *error){
        if (!error) {
            NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
            NSString *msg = [jsonDict objectForKey:@"msg"];
            NSString *ret_code = [jsonDict objectForKey:@"code"];
            NSLog(@"%d-----------",ret_code.intValue);
            if (ret_code.intValue != 200) {
                [SVProgressHUD showErrorWithStatus:msg];
                [SVProgressHUD dismissWithDelay:2.0];
            }else{
                [SVProgressHUD showSuccessWithStatus:NSLocalizedString(@"已上傳", nil)];
                [SVProgressHUD dismissWithDelay:2.0];
                [self.navigationController popViewControllerAnimated:YES];
            }
            
            NSString * str  =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%s:返回?cái)?shù)據(jù)2222:%@",__func__,str);
        }
    }];
    
}

///

希望能幫助你們盅弛!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末楼眷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熊尉,更是在濱河造成了極大的恐慌,老刑警劉巖掌腰,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狰住,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡齿梁,警方通過(guò)查閱死者的電腦和手機(jī)催植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)勺择,“玉大人创南,你說(shuō)我怎么就攤上這事∈『耍” “怎么了稿辙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)气忠。 經(jīng)常有香客問(wèn)我邻储,道長(zhǎng)赋咽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任吨娜,我火速辦了婚禮脓匿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宦赠。我一直安慰自己陪毡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布勾扭。 她就那樣靜靜地躺著毡琉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尺借。 梳的紋絲不亂的頭發(fā)上绊起,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音燎斩,去河邊找鬼虱歪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛栅表,可吹牛的內(nèi)容都是我干的笋鄙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怪瓶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼萧落!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起洗贰,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤找岖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后敛滋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體许布,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年绎晃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜜唾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庶艾,死狀恐怖袁余,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咱揍,我是刑警寧澤彤叉,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布康栈,位于F島的核電站碗淌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蟹地。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一藤为、第九天 我趴在偏房一處隱蔽的房頂上張望怪与。 院中可真熱鬧,春花似錦缅疟、人聲如沸分别。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耘斩。三九已至,卻和暖如春桅咆,著一層夾襖步出監(jiān)牢的瞬間括授,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工岩饼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荚虚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓籍茧,卻偏偏與公主長(zhǎng)得像版述,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寞冯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354