網絡篇-NSURLConnection原生上傳

簡述:app

其實使用原生的NSURLConnection上傳是一個很是哀傷的事情,要拼接無數次,而且多一個換行,一個空格,一個標點都不行,既嚴格,又shit 因此通常都是用的都是三方框架:AFNetwork,ASIHTTPRequest等,那麼這裏我就簡簡單單的寫一下。框架

  • 一、首先無論什麼,咱們要把最大的幾部操做完成代碼以下:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //由於文件比較大  咱們這裏就使用POST了
    //一、肯定URL
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];
    //二、肯定請求   由於用POST請求,因此這裏使用NSMutableURLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //2.一、 設置請求方式 post
    request.HTTPMethod = @"POST";


    //2.二、請求體個人拼一個會兒........
    //request.HTTPBody = ?;


    //三、發送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}
  • 二、看完上面,那麼咱們就剩下,最爽的一幕了,拼拼拼拼
    好了先看看這個圖,上傳文件和普通的POST請求不同,它多了一些這個,然而這裏就有是須要咱們拼接的內容,分兩部分
  • 上面的Content-Type是在咱們的請求頭裏面的
  • 下面的那些寫紅色字的就是咱們所請求 須要拼接的
  • 至於換多少行,我也一一的拼接出來了,大家拼接的話能夠跟着下面的圖一步一步拼接.post

代碼:url

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //由於文件比較大  咱們這裏就使用POST了

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

    //二、肯定請求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    /******************************************************************/
    //                          設置請求頭
    [request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"];

    /******************************************************************/
    //                          設置請求體
    // 設置請求體
    // 給請求體加入固定格式數據  這裏也是使用的也是可變的,由於多嘛
    NSMutableData *data = [NSMutableData data];
    /******************************************************************/
    //                       開始標記
    [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]];
    /******************************************************************/
    //                      上傳文件參數
    //圖片數據  而且轉換爲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]];
    /******************************************************************/
    //                       非文件參數
    [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]];
    /******************************************************************/
    //                      添加結束標記
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/

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

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

補充:code

其實原生的只是拼接起來很是的麻煩,須要帶一點細心,不過出bug真的要讓人瘋掉,你們能夠嘗試一下。orm

結束blog

本章到此結束
            歡迎各位碼友隨意轉載並指正
相關文章
相關標籤/搜索