1. AFN上傳檔案的方法主要為:
A.[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" error:nil];
B.[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
2.AFN 下載下傳圖檔需要了解的知識點,伺服器傳回的什麼類型的資料,就用什麼類型來解析。
-(void)download{ //下載下傳圖檔
AFHTTPSessionManager *mgr = [AFHTTPSessionManagermanager];
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];//解析除了JSON和XML的資料,即伺服器傳回的原類型的資料。
mgr.responseSerializer = [AFJSONResponseSerializerserializer];//JSON解析。
mgr.responseSerializer = [AFXMLParserResponseSerializerserializer];//XML解析。
[mgr GET:@"http://img03.tooopen.com/images/20160630/tooopen_sy_168334097794.jpg"parameters:nilprogress:nilsuccess:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
NSLog(@"responseObject%@",responseObject);
_showImage.image = [UIImageimageWithData:responseObject];
} failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {
NSLog(@"error%@",error);
}];
}
3.AFN讓線程不死的舉例:
[self performSelector:@selector( ) onThread: withObject:nil waitUntilDone:NO modes:[self.rumloopModes allObjects]];
4.開始網絡監控AFN
-(void)watchTheNetworkStatus{
//開始網絡監控
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManagersharedManager];
// AFNetworkReachabilityStatusUnknown = -1,
// AFNetworkReachabilityStatusNotReachable = 0, 沒有網絡
// AFNetworkReachabilityStatusReachableViaWWAN = 1, 4G
// AFNetworkReachabilityStatusReachableViaWiFi = 2, WIFI
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%ld",(long)status);
}];
mgr.networkReachabilityStatus = ; //可以用來拿到目前網絡。
[mgr startMonitoring];
}
5.系統自帶的監控網絡的方法
- (void)appleMonitoring
{
// 監聽通知
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(getNetworkStatus)name:kReachabilityChangedNotificationobject:nil];
//object為nil表示隻要有人發出通知就執行。
// 開始監控網絡
self.reachability = [ReachabilityreachabilityForInternetConnection];
[self.reachabilitystartNotifier];
}
- (void)dealloc
{
[[NSNotificationCenterdefaultCenter] removeObserver:self];
[self.reachabilitystopNotifier];
self.reachability =nil;
}
- (void)getNetworkStatus
{
if ([ReachabilityreachabilityForLocalWiFi].currentReachabilityStatus !=NotReachable) {
NSLog(@"是wifi");
} elseif ([ReachabilityreachabilityForInternetConnection].currentReachabilityStatus !=NotReachable) {
NSLog(@"是手機自帶網絡");
} else {
NSLog(@"網絡有問題");
}
}
6.上傳照片
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"請選擇圖檔" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照", @"相冊", nil];
[sheet showInView:self.view.window];
}
#pragma mark - UIActionSheet
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
// 設定代理
ipc.delegate = self;
switch (buttonIndex) {
case 0: { // 拍照
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return;
ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
break;
}
case 1: { // 相冊
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;
ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
break;
}
default:
break;
}
// 顯示控制器
[self presentViewController:ipc animated:YES completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// 銷毀控制器
[picker dismissViewControllerAnimated:YES completion:nil];
// 獲得圖檔
UIImage *image = info[UIImagePickerControllerOriginalImage];
// 顯示圖檔
self.imageView.image = image;
}
- (void)upload1
{
// 1.建立一個管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.封裝參數(這個字典隻能放非檔案參數)
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"123";
params[@"age"] = @20;
params[@"pwd"] = @"456";
params[@"height"] = @1.55;
// 2.發送一個請求
NSString *url = @"http://localhost:8080/MJServer/upload";
[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// 在發送請求之前會自動調用這個block
// 需要在這個block中添加檔案參數到formData中
NSURL *url = [[NSBundle mainBundle] URLForResource:@"itcast" withExtension:@"txt"];
[formData appendPartWithFileURL:url name:@"file" fileName:@"test.txt" mimeType:@"text/plain" error:nil];
// UIImage *image = [UIImage imageNamed:@"minion_01"];
// NSData *fileData = UIImagePNGRepresentation(image);
// [formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"上傳成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"上傳失敗");
}];
}
- (IBAction)upload {
if (self.imageView.image == nil) return;
// 1.建立一個管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.封裝參數(這個字典隻能放非檔案參數)
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"username"] = @"123";
params[@"age"] = @20;
params[@"pwd"] = @"456";
params[@"height"] = @1.55;
// 2.發送一個請求
NSString *url = @"http://192.168.15.172:8080/MJServer/upload";
[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSData *fileData = UIImageJPEGRepresentation(self.imageView.image, 1.0);
[formData appendPartWithFileData:fileData name:@"file" fileName:@"haha.jpg" mimeType:@"image/jpeg"];
// 不是用這個方法來設定檔案參數
// [formData appendPartWithFormData:fileData name:@"file"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"上傳成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"上傳失敗");
}];
// 檔案下載下傳,檔案比較大,斷點續傳技術:普遍所有的HTTP伺服器都支援
// 檔案上傳,檔案比較大,斷點續傳技術:一般的HTTP伺服器都不支援,常用的技術用的是Socket(TCP\IP、UDP)
}