AFNetworking上传一张或多张图片,并压缩图片节约占用内存
2024-10-14 07:22:45
最近在做APP的时候,遇到了难题:根据公司需求,在用户评论并上传图片的时候,有的手机像素比较高拍的照片高清的,但是每张图片占用的内存太大,或者上传照片的时候,相册的部分照片本身就占很大内存空间,后台数据库内存量有限,如果后期用户达到了几百万,每个用户都评论并上传这么高像素大内存的图片上去,后台数据库怕承受不了,继续拓展后台存储量的话,需要很大成本,那么怎么在前台来处理这些上传的图片而又不失大体呢?
这次总结得是用AFNetworking 向后台传输一张或多张图片,并且将照片压缩,感觉还是AFNetworking好使,相比原生的NSSURLsession的传输方法,话不多说,开始分享,用的话,代码基本不用改,直接用~(上传头像的时候,点击保存~触发这个)
上传单张图片:
↓↓↓
UIImage *image = [UIImage imageNamed:@""];
NSMutableDictionary *photo = [NSMutableDictionary dictionary];
[photo setObject:@"" forKey:@"phoneNumber"]; [photo setObject:@"" forKey:@"psw"]; NSLog(@"1111%@",photo); AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = ;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"text/plain",@"multipart/form-data"]];
[manager POST:@"http://192.168.0.105:8080/miracle/Upload.action" parameters:photo constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { NSDate *date = [NSDate date];
NSDateFormatter *formormat = [[NSDateFormatter alloc]init];
[formormat setDateFormat:@"HHmmss"];
NSString *dateString = [formormat stringFromDate:date]; NSString *fileName = [NSString stringWithFormat:@"%@.png",dateString];
NSData *imageData = UIImageJPEGRepresentation(image, );
double scaleNum = (double)*/imageData.length;
NSLog(@"图片压缩率:%f",scaleNum); if(scaleNum <){ imageData = UIImageJPEGRepresentation(image, scaleNum);
}else{ imageData = UIImageJPEGRepresentation(image, 0.1); } [formData appendPartWithFileData:imageData name:@"files" fileName:fileName mimeType:@"image/jpg/png/jpeg"]; } progress:^(NSProgress * _Nonnull uploadProgress) { NSLog(@"---%@",uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"`````````%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];
上传多张图片:
NSArray * _imageArr = @[@"",@"",@""]; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = ;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"text/plain",@"multipart/form-data"]];
[manager POST:@"http://192.168.0.105:8080/miracle/Upload.action" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { for (int i=; i<_imageArr.count; i++) { UIImage * image =[UIImage imageNamed:_imageArr[i]];
NSDate *date = [NSDate date];
NSDateFormatter *formormat = [[NSDateFormatter alloc]init];
[formormat setDateFormat:@"HHmmss"];
NSString *dateString = [formormat stringFromDate:date]; NSString *fileName = [NSString stringWithFormat:@"%@.png",dateString];
NSData *imageData = UIImageJPEGRepresentation(image, );
double scaleNum = (double)*/imageData.length;
NSLog(@"图片压缩率:%f",scaleNum); 23 if(scaleNum <){ imageData = UIImageJPEGRepresentation(image, scaleNum);
}else{ imageData = UIImageJPEGRepresentation(image, 0.1); } [formData appendPartWithFileData:imageData name:@"files" fileName:fileName mimeType:@"image/jpg/png/jpeg"];
}
} progress:^(NSProgress * _Nonnull uploadProgress) { NSLog(@"---%@",uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"`````````%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];
最新文章
- 浅谈servlet
- Size Balance Tree(SBT模板整理)
- 微信JS SDK Demo 官方案例[转]
- Qt5 程序启动画面动图效果
- COM技术の接口
- Windows PE 之 MASM32 环境搭建
- C# 使用WIN32API设置外部程序窗口无边框
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
- ????????????	no permissions
- centos 搭建 darwin calendar 服务器
- checkbox遍历操作, 提交所有选中项的值
- Data Guard组件等相关介绍
- 慕学在线网0.3_四个model
- TDateTimePicker 选择最小日期时异常处理
- [UE4]删除UI:Remove from Parent
- linux下的重命名
- Android应用--QR的生成(二维码)
- 红黑树-算法大神的博客-以及java多线程酷炫的知识
- 样条曲线catmull rom转bezier
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;deptDao_a&#39; defined in class path resource [beansAndHibernate.xml]: Cannot resolve reference to bean &#39;sessionFact
热门文章
- 由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法
- 4.Redux学习4----react-redux
- Centos 中使用通过docker 部署.netcore
- 【zabbix告警监控】配置zabbix监控nginx服务
- javascript中的slice()方法
- 【每天一题】LeetCode 0028. 字符串匹配
- Prometheus学习系列(二)之Prometheus FIRST STEPS
- Flask 教程 第十一章:美化
- SQLyog连接MySQL8.0报2058错误的解决方案
- [转]UiPath Deployment Architecture