NSURLSession参数、文件上传实例

本文介绍如何在iOS应用开发中使用NSURLSession进行HTTP POST请求,包括如何设置请求头、构造请求体并上传多个参数及文件。通过具体示例代码展示了multipart/form-data格式的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


-(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);
    }];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值