AFNetworking3.0 post请求,纯代码,拿去不谢

#import <Foundation/Foundation.h>

@interface AFNetworkTool : NSObject

+(AFNetworkTool *)sharedManager;

/**
 *  发送一个POST请求
 *
 *  @param url     请求路径
 *  @param params  请求参数
 *  @param formdata追加数据的回调  (请将追加的其他格式数据写到这个block中)
 *  @param progress请求进程的回调  (请将进程的事情写到这个block中)
 *  @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中)
 *  @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中)
 */
- (void)HTTPPost:(NSString *)url parameters:(NSDictionary *)parameters formdata:(void(^)(id<AFMultipartFormData>formdata))formdata  progress:(void(^)(NSProgress *uploadProgress))progress success:(void (^)(id responseObj))success failure:(void (^)(NSError *error))failure;


@end
#import "AFNetworkTool.h"

@implementation AFNetworkTool

#pragma mark --  使用单例、GCD一次创建
+(AFNetworkTool *)sharedManager
{
    static AFNetworkTool *af=nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        af=[[AFNetworkTool alloc]init];
    });
    return af;
}

#pragma mark -- post请求
- (void)HTTPPost:(NSString *)url parameters:(NSDictionary *)parameters formdata:(void (^)(id<AFMultipartFormData>))formdata progress:(void (^)(NSProgress *))progress success:(void (^)(id))success failure:(void (^)(NSError *))failure{
    // 开启网络指示器
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    // 设置超时时间
    [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
    manager.requestSerializer.timeoutInterval = 20.f;
    [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
    
    /*
     *从本地获取请求头参数
     **/
    // token
    NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:@"token"];
    // requestkey
    //获取系统当前的时间戳
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval a=[dat timeIntervalSince1970]*1000;
    NSString *timeString = [MSEncryptUtil encryptUseDES:[NSString stringWithFormat:@"%f", a] key:token];//转为字符型
    
    // 截取token
    NSRange rangeleft = NSMakeRange(0, 4);
    NSString *tokenleft = [token substringWithRange:rangeleft];
    
    NSRange rangeright = NSMakeRange(4, 4);
    NSString *tokenright = [token substringWithRange:rangeright];
    
    
    NSString *requestkey = [NSString stringWithFormat:@"%@%@%@",tokenleft,timeString,tokenright];
    
    //orgcode
    NSString *orgcodeOne = [[NSUserDefaults standardUserDefaults]objectForKey:@"organization"];
    NSString *orgcode = [MSEncryptUtil encryptUseDES:[NSString stringWithFormat:@"%@", orgcodeOne] key:token];
    
    // 设置请求头参数
    // token
    [manager.requestSerializer setValue:token forHTTPHeaderField:@"token"];
    //requestkey
    [manager.requestSerializer setValue:requestkey forHTTPHeaderField:@"requestkey"];
    //经销商代码
    [manager.requestSerializer setValue:orgcode forHTTPHeaderField:@"orgcode"];
    
    // 请求参数类型
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/xml",@"text/html", nil ];
    // post请求
    [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        if (formdata)
        {
            formdata(formData);
        }
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        if (progress)
        {
            progress(uploadProgress);
        }
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 成功,关闭网络指示器
        if (success)
        {
            [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
            
            success(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 失败,关闭网络指示器
        if (failure)
        {
            [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;
            
            failure(error);
        }
    }];
}
@end

鉴于都说上传数据,那我贴我上传图片的代码:

[SVProgressHUD showWithStatus:@"上传中..." maskType:SVProgressHUDMaskTypeGradient];
    // 异步加载数据
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSString *url = [NSString stringWithFormat:@"%@follow/uploadPictures",RSE_URL];
        // 对userid进行加密
        NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];
        NSString *userstr = [NSString stringWithFormat:@"%zd",[_model.cusid integerValue]];
        NSString *userid = [MSEncryptUtil encryptUseDES:userstr key:token];
        //  图片
       
        NSData *data;
        if (array.count > 0) {
            
            for(int i = 0;i< array.count;i++){
                 //  压缩图片
                data = UIImageJPEGRepresentation([array objectAtIndex:i],1.0);
                NSLog(@"压缩过的图片的文件大小 %zdKB",[data length]/1024);
                
                // 设置参数
                NSMutableDictionary *dic = [NSMutableDictionary dictionary];
                [dic setValue:userid forKey:@"cusId"];  // 客户id
                [dic setValue:_model.cusType forKey:@"cusType"]; // 客户类型
                [dic setValue:imagType forKey:@"pictureType"]; // 图片类型
                
                
                [[AFNetworkTool  sharedManager] HTTPPost:url parameters:dic formdata:^(id<AFMultipartFormData> formdata) {
                    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
                    formatter.dateFormat = @"yyyyMMddHHmmss";
                    NSString *str = [formatter stringFromDate:[NSDate date]];
                    NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
                    
                    [formdata appendPartWithFileData:data  name:@"fileName" fileName:fileName mimeType:@"image/png"];
                } progress:^(NSProgress *uploadProgress) {
                    
                } success:^(id responseObj) {
                    [SVProgressHUD dismiss];
                } failure:^(NSError *error) {
                    NSLog(@"error : %@",error);
                    [SVProgressHUD showErrorWithStatus:@"上传失败" duration:0.5];
                }];
            }
        };
        
    });

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 141,930评论 1 299
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 60,888评论 1 255
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 93,606评论 0 211
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 40,848评论 0 175
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,544评论 1 253
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,671评论 1 173
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,312评论 2 267
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,112评论 0 165
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 28,899评论 6 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,451评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,221评论 2 213
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,541评论 1 225
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,196评论 0 31
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,079评论 2 213
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,448评论 3 204
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,597评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 25,969评论 0 164
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,451评论 2 230
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,523评论 2 229

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,367评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,455评论 4 58
  • 8月22日,2015国际田联田径世锦赛在北京鸟巢国家体育场揭幕,来自世界各地的知名运动员汇集在金秋的北京,享受田径...
    第一视频新媒体阅读 271评论 0 1
  • 17年的最后一天,宿舍里唯一的我貌似有些孤单,对即将结束的这一年没有太多遗憾,对即将到来的新一年,一切都是未知,难...
    青瑶古韵阅读 274评论 0 0
  • 中班开学后,女儿因为胳膊骨折打石膏的原因没有去幼儿园,截止今日,也就去了一个星期的时间。 昨天...
    小天sky阅读 670评论 0 7