zoukankan      html  css  js  c++  java
  • iOS实现文件上传功能模块

    iOS实现文件上传功能,首先要知道的是,上传到服务器的数据格式,一般采用HTTP文件上传协议。如下图

    如图所示,只要设置好了HTTP的协议格式,就可以实现文件上传功能。

    代码如下:

    //图片上传模块 contentData代表上传文件的数据内容
    - (void)uploadFileData:(NSData *)contentData{
    //获取全局的NSURLSession对象(无法设置代理) //NSURLSession *session = [NSURLSession sharedSession]; NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]]; //http://192.168.199.237/file.php http://192.168.1.101/service?wdService=UpLoad
    //服务器地址 NSURL *url = [NSURL URLWithString:@"http://192.168.1.101/service?wdService=UpLoad"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 设置请求头数据。boundary:边界(分隔符:让服务器能够识别数据!!!!!!!不要忘记这里,重要的事说三遍,不要忘记这里,不要忘记这里) [request setValue:@"multipart/form-data; boundary=WebKitFormWYZJ2015" forHTTPHeaderField:@"Content-Type"]; // 给请求头加入固定格式数据 NSMutableData *data = [NSMutableData data];
    /****************文件参数相关设置*********************/ // 设置边界 注:必须和请求头数据设置的边界一样, 前面多两个“-”;(字符串 转 data 数据),代表协议开始 [data appendData:[@"--WebKitFormWYZJ2015" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // 设置传入数据的基本属性, 包括有 传入方式 data ,传入的类型(名称)服务器接收字段 ,传入的文件名, 。 [data appendData:[@"Content-Disposition: form-data; name="file"; filename="filename.jpg"" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // 设置内容的类型 “文件类型/扩展名” MIME中的application/octet-stream [data appendData:[@"Content-Type: image/jpeg" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; //设置编码方式 [data appendData:[@"Content-Transfer-Encoding: binary" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]];// 加入数据内容 [data appendData:contentData]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // // 设置边界 // [data appendData:[@"--WebKitFormWYZJ2015" dataUsingEncoding:NSUTF8StringEncoding]]; // [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; /******************非文件参数相关设置**********************/
      
    // // 设置传入的类型(名称),服务器解析字段username,获得用户名 // [data appendData:[@"Content-Disposition: form-data; name="username"" dataUsingEncoding:NSUTF8StringEncoding]]; // [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // // // 传入的名称username = zhangsan // [data appendData:[@"zhangsan" dataUsingEncoding:NSUTF8StringEncoding]]; // [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; // 退出边界,在分隔符的后面需要加上两个"--",代表协议结束 [data appendData:[@"--WebKitFormWYZJ2015--" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@" " dataUsingEncoding:NSUTF8StringEncoding]]; //设置HTTP主体 request.HTTPBody = data; //设置上传文件方法,一般为POST request.HTTPMethod = @"POST"; NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { //服务器返回数据 NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    //服务器返回的状态码 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; NSUInteger httpStateCode = [httpResponse statusCode]; NSDictionary *dic = @{@"info":@(httpStateCode)};
    //使用通知来传值 NSNotification
    *notification = [NSNotification notificationWithName:@"HttpStateCode" object:nil userInfo:dic]; [[NSNotificationCenter defaultCenter] postNotification:notification]; }]; //启动任务 [task resume]; }

    在代码中,使用了NSURLSession来作为请求网络数据的对象,苹果公司在iOS9中已经不推荐使用NSURLConnection来请求网络数据了。

    设置NSURLSession的代理后,可以监听文件上传的进度和文件上传情况。

  • 相关阅读:
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
    MVC解决Json DataGrid返回的日期格式是/Date(20130450000365)
    Easyui 让DataGrid适应浏览器宽度
    Easyui 让Window弹出居中与最大化后居中
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
  • 原文地址:https://www.cnblogs.com/hd1992/p/5028265.html
Copyright © 2011-2022 走看看