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