AFN笔记

作者: Show撑腰 | 来源:发表于2015-11-27 15:27 被阅读0次

    - (void)download

    {

    // 1.创建AFN管理者

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    // 2.利用AFN下载文件

    NSURLRequest*request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://120.25.226.186:32812/resources/images/minion_02.png"]];

    NSURLSessionDownloadTask*task = [managerdownloadTaskWithRequest:requestprogress:nildestination:^NSURL*(NSURL*targetPath,NSURLResponse*response) {

    //请求完成的回调

    // targetPath :下载好的文件的路径

    // response:响应头

    // block的返回值:告诉AFN框架,是否需要将下载好的文件移动到其它路径下

    NSLog(@"targetPath = %@", targetPath);

    NSString*path = [response.suggestedFilenamecacheDir];

    NSURL*destURL = [NSURLfileURLWithPath:path];

    NSLog(@"destURL = %@", destURL);

    returndestURL;

    }completionHandler:^(NSURLResponse*response,NSURL*filePath,NSError*error) {

    //下载完成的回调

    // filePath :移动之后的文件路径

    NSLog(@"filePath = %@", filePath);

    }];

    [task   resume];

    }

    - (void)download2

    {

    // 1.创建AFN管理者

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    //创建NSProgress

    /*

    @property int64_t totalUnitCount;需要下载文件的总大小

    @property int64_t completedUnitCount;已经下载文件的总大小

    */

    NSProgress*progress =nil;

    self.progress= progress;

    // 2.利用AFN下载文件

    NSURLRequest*request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://120.25.226.186:32812/resources/videos/minion_02.mp4"]];

    //只要将NSProgress对象传递给AFN, AFN就会在内部自动给NSProgress赋值\会自动修改NSProgress的下载进度

    NSURLSessionDownloadTask*task = [managerdownloadTaskWithRequest:requestprogress:&progressdestination:^NSURL*(NSURL*targetPath,NSURLResponse*response) {

    //请求完成的回调

    NSString*path = [response.suggestedFilenamecacheDir];

    NSURL*destURL = [NSURLfileURLWithPath:path];

    returndestURL;

    }completionHandler:^(NSURLResponse*response,NSURL*filePath,NSError*error) {

    //下载完成的回调

    // filePath :移动之后的文件路径

    NSLog(@"filePath = %@", filePath);

    }];

    //给NSProgress注册监听,监听它的completedUnitCount属性的改变

    [progressaddObserver:selfforKeyPath:@"completedUnitCount"options:NSKeyValueObservingOptionNewcontext:nil];

    //注意:必须手动执行才会开始下载

    [task  resume];

    //NSLog(@"%@", progress);

    }

    - (void)dealloc

    {

    [selfremoveObserver:self.progressforKeyPath:@"completedUnitCount"];

    }


    - (void)upload

    {

    // 1.创建AFN管理者

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    // 2.利用AFN上传文件

    NSDictionary*dict =@{

    @"username":@"lnj"

    };

    [managerPOST:@"http://120.25.226.186:32812/upload"parameters:dictconstructingBodyWithBlock:^(id formData) {

    //在这个block中上传文件数据

    // formData就是专门用于保存需要上传文件的二进制数据的

    NSData*data = [NSDatadataWithContentsOfFile:@"/Users/xiaomage/Desktop/Snip20150824_1.png"];

    //注意:该方法不能用于POST上传

    //[formData appendPartWithFormData:data name:@"file"];

    /*

    第一个参数:需要上传的文件二进制

    第二个参数:服务器对应的参数名称

    第三个参数:文件的名称

    第四个参数:文件的MIME类型

    */

    //[formData appendPartWithFileData:data name:@"file" fileName:@"abc.png" mimeType:@"image/png"];

    /*

    第一个参数:需要上传的文件的URL

    第二个参数:服务器对应的参数名称

    第三个参数:文件的名称

    第四个参数:文件的MIME类型

    */

    NSURL*url = [NSURLfileURLWithPath:@"/Users/yedayi/Desktop/1.png"];

    //[formData appendPartWithFileURL:url name:@"file" fileName:@"def.png" mimeType:@"image/png" error:nil];

    //如果使用以下方法上传文件, AFN会自动获取文件的名称和类型

    [formDataappendPartWithFileURL:urlname:@"file"error:nil];

    }success:^(NSURLSessionDataTask*task,idresponseObject) {

    NSLog(@"成功的回调%@", responseObject);

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

    NSLog(@"失败的回调");

    }];

    NSLog(@"---------------");

    }


    - (void)serializer

    {

    // 1.创建AFN管理者

    AFHTTPSessionManager*manager = [AFHTTPSessionManagermanager];

    //如果服务器返回的不是JSON数据,那么需要提前告诉AFN如何处理处理数据

    //只要给AFN的responseSerializer属性,赋值为AFXMLParserResponseSerializer,以后AFN就会将服务器返回的数据当做XML来处理

    //manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    //只要给AFN的responseSerializer属性,赋值为AFHTTPResponseSerializer,以后AFN就会将服务器返回的数据当做二进制来处理,也就是说不做任何处理

    manager.responseSerializer= [AFHTTPResponseSerializerserializer];

    // 2.利用AFN发送请求

    NSDictionary*dict =@{

    @"username":@"520it",

    @"pwd":@"520it",

    @"type":@"XML",

    };

    [managerPOST:@"http://120.25.226.186:32812/resources/images/minion_02.png"parameters:nilsuccess:^(NSURLSessionDataTask*task,idresponseObject) {

    //注意: AFN默认会将服务器返回的数据当做JSON处理

    //如果服务器返回的是JSON数据,那么会自动转换为OC对象

    NSLog(@"%@", responseObject);

    //只要设置AFN的responseSerializer为XML,那么返回的responseObject就是NSXMLParser解析器

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

    NSLog(@"error");

    }];

    }



    - (void)afnReachability

    {

    // 1.创建网络监听管理者

    AFNetworkReachabilityManager*manager = [AFNetworkReachabilityManagersharedManager];

    // 2.设置网络变化的回调

    [managersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus) {

    //只要用户的网络发生改变,就会调用这个block

    /*

    AFNetworkReachabilityStatusUnknown=不能识别,

    AFNetworkReachabilityStatusNotReachable=没有网络,

    AFNetworkReachabilityStatusReachableViaWWAN =蜂窝网,

    AFNetworkReachabilityStatusReachableViaWiFi =局域网,

    */

    switch(status) {

    caseAFNetworkReachabilityStatusReachableViaWWAN:

    NSLog(@"蜂窝网");

    break;

    caseAFNetworkReachabilityStatusReachableViaWiFi:

    NSLog(@"局域网");

    break;

    caseAFNetworkReachabilityStatusNotReachable:

    NSLog(@"没有网络");

    break;

    default:

    NSLog(@"不能识别");

    break;

    }

    }];

    // 3.开始监听

    [managerstartMonitoring];

    }

    相关文章

      网友评论

          本文标题:AFN笔记

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