IOS上传图片/文件的通用方法(含时间戳验证和Sign签名)

分类:手机开发| 发布:llmaomi| 查看:413 | 发表时间:2015/5/8
01 (NSString*) memberUploadavatar:(UIImage *)image {
02    NSString *action = @"action=uploadavatar";
03    NSString *mainUrl = [self getMainUrl];
04    NSString *unixTime = [NSString stringWithFormat:@"timestamp=%ld", (time_t) [[NSDate date] timeIntervalSince1970]];
05//    NSString *unixTime = @"timestamp=1429629388";
06    NSMutableArray *nameList = [[NSMutableArray alloc] init];
07    [nameList addObject:unixTime];
08    [nameList addObject:action];
09    NSString *sign = [self generateSign:mainUrl nameList:nameList];
10    NSString *url = [NSString stringWithFormat:@"%@?%@&%@&sign=%@", mainUrl, action, unixTime, sign];
11     
12    //要上传的图片
13//    UIImage *image=[params objectForKey:@"pic"];
14    //分界线的标识符
15    NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";
16    //根据url初始化request
17    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
18                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
19                                                       timeoutInterval:10];
20    //分界线 --AaB03x
21    NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
22    //结束符 AaB03x--
23    NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
24 
25    //得到图片的data
26    NSData* data = UIImagePNGRepresentation(image);
27    //http body的字符串
28    NSMutableString *body=[[NSMutableString alloc]init];
29     
30    ////添加分界线,换行
31    [body appendFormat:@"%@\r\n",MPboundary];
32    //声明pic字段,文件名为boris.png
33    [body appendFormat:@"Content-Disposition: form-data; name=\"Image\"; filename=\"boris.png\"\r\n"];
34    //声明上传文件的格式
35    [body appendFormat:@"Content-Type: image/png\r\n\r\n"];
36     
37    //声明结束符:--AaB03x--
38    NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];
39    //声明myRequestData,用来放入http body
40    NSMutableData *myRequestData=[NSMutableData data];
41    //将body字符串转化为UTF8格式的二进制
42    [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
43    //将image的data加入
44    [myRequestData appendData:data];
45    //加入结束符--AaB03x--
46    [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
47     
48    //设置HTTPHeader中Content-Type的值
49    NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
50    //设置HTTPHeader
51    [request setValue:content forHTTPHeaderField:@"Content-Type"];
52    //设置Content-Length
53    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];
54    //设置http body
55    [request setHTTPBody:myRequestData];
56    //http method
57    [request setHTTPMethod:@"POST"];
58     
59    NSError *error;
60    NSData *resdata = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
61    NSString *string = [[NSString alloc] initWithData:resdata encoding:NSUTF8StringEncoding];
62    DLog(@"%@", string);
63     
64    _errMsg = @"";
65    NSDictionary *jsonDataDict = [string JSONValue];
66    NSDictionary *jsonData = [jsonDataDict objectForKey:@"status"];
67    NSNumber *code = [jsonData objectForKey:@"code"];
68    if ([code intValue] == -1) {
69        // 上传头像失败
70        _errMsg =  [jsonData objectForKey:@"msg"];
71    else {
72        // 上传头像成功
73        NSDictionary *jsonResult =  [jsonDataDict objectForKey:@"result"];
74        NSString *avatar = [jsonResult objectForKey:@"avatar"];
75        return avatar;
76    }
77     
78    return nil;
79 
80
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/mobile-dev/1996.html