美文网首页
iOS利用AFNetworking上传多张图片(含多层嵌套)

iOS利用AFNetworking上传多张图片(含多层嵌套)

作者: daihz | 来源:发表于2017-06-09 22:51 被阅读0次

项目中需要上传多张图片,并且嵌套多层图片数组上传,看了AF的底层还有网上的一些Post请求,复习了下系统的请求类,上传图片就是将图片转化成二进制流然后放入HTTPBody中发送到服务器,如果是嵌套,只需要注重name属性对应即可,name即为key,废话不多说,下面开始上代码


 AFHTTPSessionManager *manager = [NetWorkingHelper createAFHTTPSessionManager];
    [manager POST:@"postURL"parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //压缩-添加-上传图片
        //遍历你的第一层图片请求数组
        [self.imagesArr enumerateObjectsUsingBlock:^(UIImage * _Nonnull image, NSUInteger idx, BOOL * _Nonnull stop) {
        //压缩图片转化为data,第一个参数是图片,第二个参数是压缩系数
            NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
        //添加转化后的data到body中
        //data:转化后的imageData
        //name:服务器需要的标识,服务器根据这个来取图片流,类似parameters里面的key
        //fileName:服务器保存的图片名字,base64加密后更佳 (如有不对欢迎指出 )
        //mimeType:图片类型,一般为@"image/jpeg"固定格式,特殊可添加其他格式
            [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"image[%ld]",idx] fileName:[NSString stringWithFormat:@"%@%lu.jpeg",@"planImage",(unsigned long)idx]mimeType:@"image/jpeg"];
        }];


        //这里上传嵌套的图片,比如你请求类第一层里面有数组包含第二层,第二层里面有图片数组或依次类推,都只需按对应的name(key)来上传即可,如图片需要绑定其他参数要转化成data放在这里面一起上传
         [self.imageArray enumerateObjectsUsingBlock:^(NSArray*  _Nonnull obj, NSUInteger idxs, BOOL * _Nonnull stop) {
             //压缩-添加-上传图片
             [self.imageArray[idxs] enumerateObjectsUsingBlock:^( UIImage*_Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                     NSData *imageData = UIImageJPEGRepresentation(obj, 1.0);
                     [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"list[%ld].images[%ld].image",idxs,idx] fileName:[NSString stringWithFormat:@ "%@%lu.jpeg",@"picDTOImage",(unsigned long)idx]mimeType:@"image/jpeg"];
                     NSData *strData = [@"2" dataUsingEncoding:NSUTF8StringEncoding];
                     [formData appendPartWithFormData:strData name:[NSString stringWithFormat:@"list[%ld].images[%ld].type",idxs,idx]];

             }]; 
             
         }];
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        //上传进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        
    }];

相关文章

网友评论

      本文标题:iOS利用AFNetworking上传多张图片(含多层嵌套)

      本文链接:https://www.haomeiwen.com/subject/rqnfqxtx.html