美文网首页IOS-OC
AFNetworking 3.0 实现form表单数据提交

AFNetworking 3.0 实现form表单数据提交

作者: 实验室小白鼠 | 来源:发表于2016-09-20 14:57 被阅读1900次

    1、 先看下表单页面的HTML代码

    <form name="form1" id="form1" enctype="multipart/form-data" method="post" action="/ashx/uploadPic.ashx" >
    <input id="Hidden1" type="hidden" name="UploadData" 
           value="{'key1':'value1'}" />
        <p>
             第一张图片:<input type="file" name="photoF" id="photo"> 
        </p>
        <p>
             第二张图片:<input type="file" name="photoS" id="photo">
        </p>
        <p>
            <input type="submit" name="b1" value="提交">
        </p>
    </form>
    

    2、 看完form表单的内容接下来我们来写客户端的提交代码
    从上面的表单可以看出需要提交的内容有:json字符串和两张照片

        //需要提交的数据
        NSData  *data_f = UIImageJPEGRepresentation(zImage, 0.8);
        NSData  *data_s = UIImageJPEGRepresentation(fImage, 0.8);
        NSDictionary  * dic = [NSMutableDictionary new];
        [dic setValue:@"value1" forKey:@"key1"];
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
    
        //配置AF
        AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
        [manage.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        manage.requestSerializer = [AFHTTPRequestSerializer serializer];
        manage.responseSerializer = [AFHTTPResponseSerializer serializer];
        manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];
    
        [manage POST:@"提交的URL" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            //当提交一张图片或一个文件的时候 name 可以随便设置,服务端直接能拿到,如果服务端需要根据name去取不同文件的时候,则appendPartWithFileData 方法中的 name 需要根据form的中的name一一对应  
            [formData appendPartWithFormData:jsonData name:@"UploadData"];
            [formData appendPartWithFileData: data_f name:@"photoF" fileName:@"a.jpg" mimeType:@"image/jpeg"];
            [formData appendPartWithFileData: data_s name:@"photoS" fileName:@"b.jpg" mimeType:@"image/jpeg"];
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        }];
    
    

    相关文章

      网友评论

      • 西叶lv:manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];这块,AFN也需要设置接收的文件类型,那AFN是不是也是接收的服务端发送来的form表单,然后从表单里获取到自己的需要的json等数据??
        西叶lv:@一季繁华o 嗯,AFN生成的form怎么在控制台打印出来啊
        实验室小白鼠:返回的格式已经跟后台约定好返回的json,如果是返回的直接是html的页面,那就要自己解析了。

      本文标题:AFNetworking 3.0 实现form表单数据提交

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