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];
                }];
            }
        };
        
    });

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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