美文网首页
AFNetworking之多图片/文件上传

AFNetworking之多图片/文件上传

作者: Gary_Kwok | 来源:发表于2016-12-26 21:43 被阅读0次

    AFNetworking是我们在日常开发中,常用于发送网络请求的第三方类库。其中,我们经常用到的方法有两类,一是普通的网络请求,其常用方法为:

    //GET请求  
    - (AFHTTPRequestOperation *)GET:(NSString *)URLString  
                         parameters:(id)parameters  
                            success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success  
                            failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure  
    //POST请求  
    - (AFHTTPRequestOperation *)POST:(NSString *)URLString  
                          parameters:(id)parameters  
                             success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success  
                             failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
    

    第二类就是我要重点说的上传文件的网络请求,跟普通的网络请求方法十分相似:

    - (AFHTTPRequestOperation *)POST:(NSString *)URLString  
                          parameters:(id)parameters  
           constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block  
                             success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success  
                             failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 
    

    这个方法中多了一个block匿名函数,它会在网络请求发送之前调用,我们要添加所需上传图片的数据,就要在这里进行,如:

    //设置网络请求管理者  
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
       //发送网络请求  
       [manager POST:url parameters:paramsDic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  
         for (int i = 0; i < self.imageArr.count; i++) {  
           UIImage *image = self.imagArr[i];  
           NSData *data = UIImagePNGRepresentation(image);  
           [formData appendPartWithFileData:data name:[NSString stringWithFormat:@"photos[%d]",i] fileName:[NSString stringWithFormat:@"image%d.png",i] mimeType:@"image/png"];  
         }  
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {  
      
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
              
        }]; 
    

    注意:
      1、name:多文件上传时,name不能重复,不能重复,不能重复,重要的事情说三遍。
      2、fileName:不能重复,这个名字由用户决定,只要不重复,其它没有要求。
      3、mimeType:你所要上传文件的类型,各种文件所对应的类型详情请自己百度。

    上传图片一般会与相册与照相机结合使用,但是其图片一般较大,可使用UIImageJPEGRepresentation(image, 0.1)方法对图片进行一定程度的压缩,具体压缩情况要结合你的实例。作一点说明:UIImagePNGRepresentation(image)与UIImageJPEGRepresentation(image, 0.1)方法都会返回图片的data数据,如果将data数据转化成图片,图片类型由后缀名决定,如果保存为.png后缀的图片,就是png图片,如果保存为.jpg后缀的图片,则就是jpg图片,故不要被方法名中的PNG和JPEG所影响。

    相关文章

      网友评论

          本文标题:AFNetworking之多图片/文件上传

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