AFNetworking上传一张或多张图片,并压缩图片节约占用内存

      最近在做APP的时候,遇到了难题:根据公司需求,在用户评论并上传图片的时候,有的手机像素比较高拍的照片高清的,但是每张图片占用的内存太大,或者上传照片的时候,相册的部分照片本身就占很大内存空间,后台数据库内存量有限,如果后期用户达到了几百万,每个用户都评论并上传这么高像素大内存的图片上去,后台数据库怕承受不了,继续拓展后台存储量的话,需要很大成本,那么怎么在前台来处理这些上传的图片而又不失大体呢?

    这次总结得是用AFNetworking 向后台传输一张或多张图片,并且将照片压缩,感觉还是AFNetworking好使,相比原生的NSSURLsession的传输方法,话不多说,开始分享,用的话,代码基本不用改,直接用~(上传头像的时候,点击保存~触发这个)

上传单张图片:

 

 UIImage *image = [UIImage  imageNamed:@"3"];
    NSMutableDictionary *photo = [NSMutableDictionary dictionary];
    [photo setObject:@"123" forKey:@"phoneNumber"];

    [photo setObject:@"123" forKey:@"psw"];

    NSLog(@"1111%@",photo);

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 20;
    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, 1);
        double scaleNum = (double)300*1024/imageData.length;
        NSLog(@"图片压缩率:%f",scaleNum);

        if(scaleNum <1){

            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) {

    }];
View Code

 

 

 

上传多张图片:

 1 NSArray * _imageArr = @[@"1",@"2",@"3"];
 2 
 3 
 4     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 5     manager.requestSerializer.timeoutInterval = 20;
 6     manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"text/plain",@"multipart/form-data"]];
 7     [manager POST:@"http://192.168.0.105:8080/miracle/Upload.action" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
 8 
 9         for (int i=0; i<_imageArr.count; i++) {
10 
11 
12         UIImage * image =[UIImage  imageNamed:_imageArr[i]];
13         NSDate *date = [NSDate date];
14         NSDateFormatter *formormat = [[NSDateFormatter alloc]init];
15         [formormat setDateFormat:@"HHmmss"];
16         NSString *dateString = [formormat stringFromDate:date];
17 
18         NSString *fileName = [NSString  stringWithFormat:@"%@.png",dateString];
19         NSData *imageData = UIImageJPEGRepresentation(image, 1);
20         double scaleNum = (double)300*1024/imageData.length;
21         NSLog(@"图片压缩率:%f",scaleNum);
22 
23 
24 
25         if(scaleNum <1){
26 
27             imageData = UIImageJPEGRepresentation(image, scaleNum);
28         }else{
29 
30             imageData = UIImageJPEGRepresentation(image, 0.1);
31 
32         }
33 
34         [formData  appendPartWithFileData:imageData name:@"files" fileName:fileName mimeType:@"image/jpg/png/jpeg"];
35         }
36     } progress:^(NSProgress * _Nonnull uploadProgress) {
37 
38         NSLog(@"---%@",uploadProgress);
39 
40     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
41 
42         NSLog(@"`````````%@",responseObject);
43 
44 
45     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
46 
47 
48     }];

 

posted on 2016-08-10 16:08  在一起的浅蓝色  阅读(564)  评论(0)    收藏  举报

导航