AFN笔记

- (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笔记)