iOSBase64POST上传图片和FormData方式比较
前言:
在我们上传图片的时候,我们最常用的方式估计就是以流的形式上传了,有些可能知道Base64为上传,有些可能不知道,现在我们仔细谈谈这个,最后我么给大家一份项目中真实用到的代码。方便理解和学习。
正文:
先说说Base64的好处,个人理解他可以减少HTTP请求,适合小尺寸的图片。一次性上传的图片不是特别的多,所以若大尺寸的图片或者是大批量的图片上传使用base64的话,会导致数据太大,加载过慢!这是自己所掌握知道的Base64位的好处。坏处的话就是Base64不能缓存,不能压缩.
再说说二进制数据流FormData的形式,这个的话就不会受到图片量大的问题,上传的速度其实也是挺快的。看看Base64位的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #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的形式,这个大家我估计可能用的比较的频繁,问题也就不太多了,这里就直接把代码贴出来就行了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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(@ "上传失败" ); }]; |
## 努力做一个合格的程序员。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话