AFNetworking 同时向服务端传送参数+图片

本文介绍在iOS应用中如何实现图片及参数的上传功能,详细展示了使用AFNetworking库的不同方法进行图片上传的过程,包括从内存中读取图片数据、从文件路径读取图片以及上传进度的监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同时向服务端传送参数+图片。

方法upload第一种方法:

都需要添加到constructingBodyWithBlock:^(id<AFMultipartFormData> formData)中。

原理:服务端截取的写法。这个需要调适


    //如果有需要打点或附加的参数,在此处添加

    NSDictionary *param =nil;

       param = [NSDictionarydictionaryWithObjectsAndKeys:@{@"agent":@"X-IOS",@"version":[[UIDevicecurrentDevice] systemVersion],@"device":[[UIDevicecurrentDevice] model],@"local":country,@"mac":macToken},@"header",

                 @{@"params":@""},@"request",nil];


    [_manager              POST:url

                      parameters:nil

       constructingBodyWithBlock:^(id<AFMultipartFormData> formData){

           if ([imageArraycount]>0) {

               for (NSInteger i=0; i < [imageArraycount];i++) {

                   id data = imageArray[i];

                   if ([dataisKindOfClass:UIImage.class]) {

                       NSData *imageData =UIImageJPEGRepresentation(data,0.01);

                       NSString *fileName = [NSStringstringWithFormat:@"file%ld.jpg",(long)i];

                       [formData appendPartWithFileData:imageDataname:@"uploadFile"fileName:fileName mimeType:@"image/jpeg"];

                   }

               }

           }

           

           NSData *data =    [NSJSONSerializationdataWithJSONObject:paramoptions:NSJSONWritingPrettyPrintederror:nil];

           

           [formData appendPartWithFormData:dataname:@"params"];

           

       }

                         success:^(AFHTTPRequestOperation *operation,id responseObject) {


                         }

                         failure:^(AFHTTPRequestOperation *operation,NSError *error) {


                         }

     ];


方法upload第二种方法:

/**
 *  AFN 3.0 上传
 *      有两种方式
 *          upLoad1 和 upLoad2
 */

//第一种方法是通过工程中的文件进行上传
- (void)upLoad1{

    //1。创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //2.上传文件
    NSDictionary *dict = @{@"username":@"1234"};

    NSString *urlString = @"22222";
    [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //上传文件参数
        UIImage *iamge = [UIImage imageNamed:@"123.png"];
        NSData *data = UIImagePNGRepresentation(iamge);
        //这个就是参数
        [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];

    } progress:^(NSProgress * _Nonnull uploadProgress) {

        //打印下上传进度
        WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        //请求成功
        WKNSLog(@"请求成功:%@",responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        //请求失败
        WKNSLog(@"请求失败:%@",error);
    }];

}

方法upload第三种方法:
//第二种是通过URL来获取路径,进入沙盒或者系统相册等等
- (void)upLoda2{
    //1.创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //2.上传文件
    NSDictionary *dict = @{@"username":@"1234"};

    NSString *urlString = @"22222";
    [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
    } progress:^(NSProgress * _Nonnull uploadProgress) {

        //打印下上传进度
        WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        //请求成功
        WKNSLog(@"请求成功:%@",responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        //请求失败
        WKNSLog(@"请求失败:%@",error);
    }];
}


来源:http://www.jianshu.com/p/11bb0d4dc649


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值