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)
}