这里介绍用AFN上传图片的例子,并给出注意事项,需要注意的地方已经以注释的方式写在代码中了。
UIImage
* image = [message valueForKey:@"originalImage"]; NSString *image_string=nil; if ([[UIDevice currentDevice].systemVersion floatValue]>=7.0) { image_string = [(UIImageJPEGRepresentation(image, 0.1)) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}else{image_string = [(UIImageJPEGRepresentation(image, 0.1)) base64Encoding]; } AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://appweb.app.cn"]]; manager.requestSerializer.timeoutInterval
= 100; NSData *nataBig = (UIImageJPEGRepresentation(image, 1.0)); NSData *nataSmall = (UIImageJPEGRepresentation(image, 0.1)); ; NSLog(@"压缩前=%ld 压缩后=%lu",nataBig.length,(unsigned long)nataSmall.length); NSLog(@"压缩比=%@%%",[NSString stringWithFormat:@"%.2f",(nataSmall.length)/(nataBig.length)]);
; NSMutableDictionary *paras = [[NSMutableDictionary alloc]init]; [paras setValue:self.msgType forKey:@"msgType"]; //以file的形式上传,这里的key很重要"accessory",这个是和服务器端对应的,千万不能乱写,一定要看接口文档,不然会上传失败 [paras setValue:(__bridge id)((__bridge FILE *)(image_string)) forKey:@"accessory"];
[paras setValue:[BLLUser getPushToken] forKey:@"senderPushToken"]; [paras setValue:self.receiverPushToken forKey:@"receiverPushToken"]; [paras setObject:[Base getKey] forKey:@"ukey"]; //@"chat/chat.htm"为上传路径 AFHTTPRequestOperation * operation = [manager POST:@"chat/chat.htm"
parameters:paras constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmss"; NSString *str = [formatter stringFromDate:[NSDate date]]; NSString *fileName
= [NSString stringWithFormat:@"%@.jpg", str]; //fileName这里取当前时间戳 //accessory还是一样和服务端对应,具体看你自己的接口文档 //mimeType选择@"image/jpeg",意思是告诉服务端,我上传的文件类型是图片类型,后缀是jpeg格式的,这里需要注意 [formData appendPartWithFileData:(UIImageJPEGRepresentation(image, 0.1)) name:@"accessory"
fileName:fileName mimeType:@"image/jpeg"]; } success:^(AFHTTPRequestOperation *operation, NSData * responseObject) //上传成功block { NSLog(@"上传成功!"); NSError * error; NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments
error:&error]; //json解析得到存储服务器返回的字典 NSLog(@"图片状态 :%@",dic[@"msg"]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //连接服务器失败 NSLog(@"图片发送失败"); }]; operation.responseSerializer = [AFHTTPResponseSerializer serializer]; [operation start];
copy,改baseURL和路径,已经上传的关键参数。就可以上传成功。