天天看点

iOS--AFN文件上传

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)

}