iOS網(wǎng)絡(luò)篇-NSURLConnection原生上傳

簡述:

其實(shí)使用原生的NSURLConnection上傳是一個非常哀傷的事情,要拼接無數(shù)次,并且多一個換行,一個空格,一個標(biāo)點(diǎn)都不行,既嚴(yán)格,又shit 所以一般都是用的都是三方框架:AFNetwork,ASIHTTPRequest等,那么這里我就簡簡單單的寫一下。

  • 1、首先不管什么,我們要把最大的幾部操作完成代碼如下:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //因?yàn)槲募容^大  我們這里就使用POST了
    //1、確定URL
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];
    //2、確定請求   因?yàn)橛肞OST請求,所以這里使用NSMutableURLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //2.1、 設(shè)置請求方式 post
    request.HTTPMethod = @"POST";


    //2.2、請求體我的拼一個會兒........
    //request.HTTPBody = ?;


    //3、發(fā)送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}
  • 2、看完上面,那么我們就剩下,最爽的一幕了,拼拼拼拼
    好了先看看這個圖,上傳文件和普通的POST請求不一樣,它多了一些這個,然而這里就有是需要我們拼接的內(nèi)容,分兩部分

  • 上面的Content-Type是在我們的請求頭里面的

  • 下面的那些寫紅色字的就是我們所請求 需要拼接的

  • 至于換多少行,我也一一的拼接出來了,你們拼接的話可以跟著下面的圖一步一步拼接.

代碼:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //因?yàn)槲募容^大  我們這里就使用POST了

    //1、確定URL
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];

    //2、確定請求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    /******************************************************************/
    //                          設(shè)置請求頭
    [request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"];

    /******************************************************************/
    //                          設(shè)置請求體
    // 設(shè)置請求體
    // 給請求體加入固定格式數(shù)據(jù)  這里也是使用的也是可變的,因?yàn)槎嗦?    NSMutableData *data = [NSMutableData data];
    /******************************************************************/
    //                       開始標(biāo)記
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"Liiii.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                      上傳文件參數(shù)
    //圖片數(shù)據(jù)  并且轉(zhuǎn)換為Data
    UIImage *image = [UIImage imageNamed:@"Liiii"];
    NSData *imagedata = UIImagePNGRepresentation(image);
    [data appendData:imagedata];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                       非文件參數(shù)
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"LitterL" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                      添加結(jié)束標(biāo)記
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/

    //請求方式
    request.HTTPMethod = @"POST";
    //請求體
    request.HTTPBody = data;

    //3、發(fā)送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}

補(bǔ)充:

其實(shí)原生的只是拼接起來非常的麻煩,需要帶一點(diǎn)細(xì)心,不過出bug真的要讓人瘋掉,大家可以嘗試一下。

結(jié)束

                  本章到此結(jié)束
            歡迎各位碼友隨意轉(zhuǎn)載并指正
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容