iOSBase64POST上传图片和FormData方式比较
2017-03-09 23:55
483 查看
前言:
在我们上传图片的时候,我们最常用的方式估计就是以流的形式上传了,有些可能知道Base64为上传,有些可能不知道,现在我们仔细谈谈这个,最后我么给大家一份项目中真实用到的代码。方便理解和学习。正文:
先说说Base64的好处,个人理解他可以减少HTTP请求,适合小尺寸的图片。一次性上传的图片不是特别的多,所以若大尺寸的图片或者是大批量的图片上传使用base64的话,会导致数据太大,加载过慢!这是自己所掌握知道的Base64位的好处。坏处的话就是Base64不能缓存,不能压缩.再说说二进制数据流FormData的形式,这个的话就不会受到图片量大的问题,上传的速度其实也是挺快的。看看Base64位的源码:
#pragma mark -- image转化成Base64位 -(NSString *)imageChangeBase64: (UIImage *)image{ NSData *imageData = nil; //NSString *mimeType = nil; if ([self imageHasAlpha:image]) { imageData = UIImagePNGRepresentation(image); //mimeType = @"image/png"; }else{ imageData = UIImageJPEGRepresentation(image, 0.3f); //mimeType = @"image/jpeg"; } return [NSString stringWithFormat:@"%@",[imageData base64EncodedStringWithOptions: 0]]; } -(BOOL)imageHasAlpha:(UIImage *)image{ CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image.CGImage); return (alpha == kCGImageAlphaFirst || alpha == kCGImageAlphaLast || alpha == kCGImageAlphaPremultipliedFirst || alpha == kCGImageAlphaPremultipliedLast); }
上面的方法,我们就把UIImage转化成Base64位的字符串给返回了,一般在使用的时候,你接收到这个字符串之后,把它以参数的形式传给后台就可以了。
还有一种就是我们的FormData的形式,这个大家我估计可能用的比较的频繁,问题也就不太多了,这里就直接把代码贴出来就行了:
NSDictionary *dic = @{@"memberId":[[LoginRecord shareLoginRecord] getMemberId],@"image":@"image.jpg"}; // 这里1.0是没有压缩图片 NSData *imageData = UIImageJPEGRepresentation(_portraitImageView.image, 1.0); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager POST:[NSString stringWithFormat:@"%@%@",BaseUrl,UpdatePortrait] parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ if (imageData) { NSString * type; NSString * mimeType; type = @"jpg"; mimeType = @"image/jpeg"; NSDate *datenow = [NSDate date]; NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]]; NSString * fileName = [NSString stringWithFormat:@"%@.%@",timeSp,type]; [formData appendPartWithFileData:imageData name:@"image" fileName:fileName mimeType:mimeType]; } }success:^(AFHTTPRequestOperation *operation, id responseObject){ ShowMessage(@"上传成功"); } failure:^(AFHTTPRequestOperation *operation, NSError *error){ ShowMessage(@"上传失败"); }];
相关文章推荐
- iOSBase64POST上传图片和FormData方式比较
- iOSBase64POST上传图片和FormData方式比较
- iOSBase64POST上传图片和FormData方式比较
- 详解IOS开发中图片上传时两种图片压缩方式的比较
- iOS post请求图片Base64编码上传
- PHP post 接口上传图片 [接收ios ||androip 两种接收图片数据流保存图片方式]
- java接收IOS上传的图片文件multipart/form-data类型
- http以post方式上传一个文件,构造其请求头和消息报文 application/x-www-form-urlencoded multipart/form-data
- spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。
- ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
- HttpURLConnection form-data的post方式,提交图片信息
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- iOS 使用formData 上传图片
- Http multipart/form-data多参数Post方式上传数据
- Get、Post(HTTP中最常用的请求方式 使用ASIHTTPRequest)----例如:登录、上传图片(调用手机相册 UIImage 转为data)
- iOS:图片上传时两种图片压缩方式的比较
- Android中Form Post方式提交,上传文件的实现
- android 用post方式上传图片到服务器
- IOS通过post方式发送图片
- iOS通过http post上传图片