zoukankan      html  css  js  c++  java
  • IOS开发--上传图片

    IOS图片上传功能实现总结

    IOS图片上传主要分两种方式实现,一个是将图片信息以表单的形式上传,一种是将图片以JSON的格式上传。

    首先要讲的是以这两个方式上传的一个比较明显的区别就是HTTP Header是如何标记的,以表单的形式上传时HTTP Header应该设置为multipart/form-data,以JSON格式上传时HTTP Header应该设置为application/json。

    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. Content-Type: multipart/form-data; boundary=${bound}  
    [html] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. Content-Type: application/json  


    了解了这些那我们在IOS项目中应该如何运用他们呢?

    一、表单上传图片

           

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. //分界线的标识符  
    2. NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";  
    3. //根据url初始化request  
    4. NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]  
    5.                                                        cachePolicy:NSURLRequestReloadIgnoringLocalCacheData  
    6.                                                    timeoutInterval:10];  
    7. //分界线 --AaB03x  
    8. NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];  
    9. //结束符 AaB03x--  
    10. NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];  
    11. //要上传的图片  
    12. UIImage *image=[params objectForKey:@"pic"];  
    13. //得到图片的data  
    14. NSData* data = UIImagePNGRepresentation(image);  
    15. //http body的字符串  
    16. NSMutableString *body=[[NSMutableString alloc]init];  
    17. //参数的集合的所有key的集合  
    18. NSArray *keys= [params allKeys];  
    19.   
    20. //遍历keys  
    21. for(int i=0;i<[keys count];i++)  
    22. {  
    23.     //得到当前key  
    24.     NSString *key=[keys objectAtIndex:i];  
    25.     //如果key不是pic,说明value是字符类型,比如name:Boris  
    26.     if(![key isEqualToString:@"pic"])  
    27.     {  
    28.         //添加分界线,换行  
    29.         [body appendFormat:@"%@ ",MPboundary];  
    30.         //添加字段名称,换2行  
    31.         [body appendFormat:@"Content-Disposition: form-data; name="%@" ",key];  
    32.         //添加字段的值  
    33.         [body appendFormat:@"%@ ",[params objectForKey:key]];  
    34.     }  
    35. }  
    36.   
    37. ////添加分界线,换行  
    38. [body appendFormat:@"%@ ",MPboundary];  
    39. //声明pic字段,文件名为boris.png  
    40. [body appendFormat:@"Content-Disposition: form-data; name="pic"; filename="boris.png" "];  
    41. //声明上传文件的格式  
    42. [body appendFormat:@"Content-Type: image/png "];  
    43.   
    44. //声明结束符:--AaB03x--  
    45. NSString *end=[[NSString alloc]initWithFormat:@" %@",endMPboundary];  
    46. //声明myRequestData,用来放入http body  
    47. NSMutableData *myRequestData=[NSMutableData data];  
    48. //将body字符串转化为UTF8格式的二进制  
    49. [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];  
    50. //将image的data加入  
    51. [myRequestData appendData:data];  
    52. //加入结束符--AaB03x--  
    53. [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];  
    54.   
    55. //设置HTTPHeader中Content-Type的值  
    56. NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];  
    57. //设置HTTPHeader  
    58. [request setValue:content forHTTPHeaderField:@"Content-Type"];  
    59. //设置Content-Length  
    60. [request setValue:[NSString stringWithFormat:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];  
    61. //设置http body  
    62. [request setHTTPBody:myRequestData];  
    63. //http method  
    64. [request setHTTPMethod:@"POST"];  
    65.   
    66. //建立连接,设置代理  
    67. NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];  
    68.   
    69. //设置接受response的data  
    70. if (conn) {  
    71.     mResponseData = [[NSMutableData data] retain];  
    72. }  

    二、JSON上传图片

         

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
      1.     //根据url初始化request  
      2.     NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]  
      3.                                                            cachePolicy:NSURLRequestReloadIgnoringLocalCacheData  
      4.                                                        timeoutInterval:10];  
      5.   
      6.     //要上传的图片  
      7.     UIImage *image=[params objectForKey:@"pic"];  
      8.     //得到图片的data  
      9.     NSData* data = UIImagePNGRepresentation(image);  
      10.     //base64编码  
      11.     NSString *photoStr = [data base64Encoding];  
      12.   
      13.     //参数字典  
      14.     NSDictionary *params = [[NSDictionary alloc] init];  
      15.     [params setObject:@{@"avatar": photoStr} forKey:@"profile"];   
      16.     NSData *myRequestData  = [NSMutableData dataWithData:[NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil]];  
      17.      
      18. //设置http header  
      19. [request.request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];  
      20.     [request.request setValue:@"application/json" forHTTPHeaderField:@"Accept"];  
      21.   
      22.     //设置http body  
      23.     [request setHTTPBody:myRequestData];  
      24.     //http method  
      25.     [request setHTTPMethod:@"POST"];  
      26.       
      27.     //建立连接,设置代理  
      28.     NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];  
      29.       
      30.     //设置接受response的data  
      31.     if (conn) {  
      32.         mResponseData = [[NSMutableData data] retain];  
      33.     }  
  • 相关阅读:
    程序员修炼之道——从小工到专家 读书笔记
    Spring5 IOC原理
    2021下期末总结
    十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
    UmbracoXslDevelopmentTemplate CQ
    Asp.net中的数据绑定 CQ
    Building the DotNetNuke Module in Normal Asp.net Application CQ
    UmbracoDataTypeFirstGlance CQ
    Umbraco Home CQ
    UmbracoColor Picker–Demo CQ
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5416032.html
Copyright © 2011-2022 走看看