NSURLSession參數、文件上傳實例


-(IBAction)httpGetData:(id)sender{
    NSURLSessionConfiguration *config1 = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSessionConfiguration *config2 = [NSURLSessionConfiguration ephemeralSessionConfiguration];
    NSURLSessionConfiguration *config3 = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"id"];
    NSURLSession *session1 = [NSURLSession sharedSession];
    NSURLSession *session2 = [NSURLSession sessionWithConfiguration:config1];
    NSURLSession *session3 = [NSURLSession sessionWithConfiguration:config1 delegate:self delegateQueue:nil];
    
    NSString *str = @"http://localhost:8080/JuRan_20151204/admin/business_upload.do";
    NSURL *url = [NSURL URLWithString:str];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //設置Header參數
    [request setValue:@"testHeader" forHTTPHeaderField:@"testHeader"];
    
    //此處發現如果Method是GET,body中放入參數提交,服務端會收不到。
    
    //設置Body值方法一,這種方法比較簡單,爲常用方法,不過只能上送參數
//    [request setHTTPMethod:@"POST"];
//    NSString *bodyStr = @"access_token=xxxxx&status=微博內容";
//    NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
//    [request setHTTPBody:bodyData];
    
    //設置Body值方法二,這種方法比較原始,不常用,不過可以用來上傳參數和文件
    NSString *BOUNDARY = @"0xKhTmLbOuNdArY";
    [request setValue:[@"multipart/form-data; boundary=" stringByAppendingString:BOUNDARY] forHTTPHeaderField:@"Content-Type"];
    [request setHTTPMethod:@"POST"];
    NSMutableData *body = [NSMutableData data];
    //多參數上送
    NSString *param1 = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",BOUNDARY,@"name1",@"value1",nil];
    [body appendData:[param1 dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *param2 = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",BOUNDARY,@"name2",@"value2",nil];
    [body appendData:[param2 dataUsingEncoding:NSUTF8StringEncoding]];
    //多文件上傳
    UIImage *image1 = [UIImage imageNamed:@"image.png"];
    NSData *data1 = UIImageJPEGRepresentation(image1, 1.0);
    NSString *file1 = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\";filename=\"%@\"\r\nContent-Type: application/octet-stream\r\n\r\n",BOUNDARY,@"logoFile",@"image.png",nil];
    [body appendData:[file1 dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:data1];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    UIImage *image2 = [UIImage imageNamed:@"image.png"];
    NSData *data2 = UIImageJPEGRepresentation(image2, 1.0);
    NSString *file2 = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\";filename=\"%@\"\r\nContent-Type: application/octet-stream\r\n\r\n",BOUNDARY,@"imageFile",@"image.png",nil];
    [body appendData:[file2 dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:data2];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //body結束分割線
    NSString *endString = [NSString stringWithFormat:@"--%@--",BOUNDARY];
    [body appendData:[endString dataUsingEncoding:NSUTF8StringEncoding]];
    [request setHTTPBody:body];
    
    NSURLSessionDataTask *task1 = [session3 dataTaskWithRequest:request];
    NSURLSessionDataTask *task2 = [session1 dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
        NSInteger responseStatusCode = [httpResponse statusCode];
        NSLog(@"responseStatusCode : %ld", responseStatusCode);
        [_webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:url];
    }];
    [task2 resume];
    
    NSURLSessionDataTask *task3 = [session3 dataTaskWithURL:url];
    NSURLSessionDataTask *task4 = [session2 dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSLog(@"task4 %@",response);
        NSDictionary *content = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//轉換數據格式
        NSLog(@"task4 %@",content);
    }];
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章