首页 > 技术文章 > iOS上传图片

viskyly 2017-09-27 16:26 原文

这里的图片上传用的是下面这个方法
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
   
    [manager POST:@"http://www.xxx.com" parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
       
        int i = 0;
        //根据当前系统时间生成图片名称
        NSDate *date = [NSDate date];
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        [formatter setDateFormat:@"yyyy年MM月dd日"];
        NSString *dateString = [formatter stringFromDate:date];
       
        for (UIImage *image in images) {
            NSString *fileName = [NSString stringWithFormat:@"%@%d.png",dateString,i];
            NSData *imageData;
            imageData = UIImagePNGRepresentation(image);
            if (!imageData) {
                imageData = UIImageJPEGRepresentation(image, 1.0f);
            }
//这里要注意”name”里面的写法”photo”和”photo[]”。一张和多张的区别
            [formData appendPartWithFileData:imageData name:@"photo[]" fileName:fileName mimeType:@"image/jpg/png/jpeg"];
            i ++;
        }
       
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        JDLog(@"%@",uploadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
        JDLog(@"%@", dict);
       
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
       
    }];
 
这里要注意的是,上传一张图片和上传多张图片的区别,上传一张图片,图片的"name”里面是一个”photo”,而上传多张图片的时候,”name”里面的是一个数组,所以,里面要做一个小改动,要将里面的”photo”,后面加上一个中括号,”photo[ ]”,这样子,后台收到的图片就是一个数组,不是只有一张图片,如果是没有中括号,最后上传上去的图片是最后一张能收到。

推荐阅读