- (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];
}
网友评论