iOS 开发 AFNetworking实现网络请求,上传和下载

来源:互联网 发布:列数据的作用 编辑:程序博客网 时间:2024/05/20 09:27

AFNetworking数据格式

  • 请求的数据格式

这里写图片描述

  • 响应数据格式

这里写图片描述

  • 常见问题

1.AFN默认不支持接收 text/html 文件类型的;如果你非要接收这个文件,就需要自己添加
2.AFN默认把数据党JSON在解析;如果你要解析非JSON的数据,就需要额外的设置;还有,如果你要解析html,就需要让AFN给你返回原始的二进制数据,自己解析.
3.AFN默认不支持接收 text/plain 文件类型的;如果你非要接收这个文件,就需要自己添加
4.AFN默认只能向服务器发送简单的二进制数据(GET和POST请求信息).不支持发送JSON格式的数据;如果非要通过AFN发送json到服务器,那么就需要告诉AFN,让它做支持;

    // 1.创建网络请求管理者    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    // 让AFN默认也支持接收text/html文件类型    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain", nil];    // 让AFN返回原始的二进制数据,我们自己来解析    manager.responseSerializer = [AFHTTPResponseSerializer serializer];//    // 让AFN返回原始的XNL数据,我们自己来解析//    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];//    // 让AFN返回原始的plist数据,我们自己来解析//    manager.responseSerializer = [AFPropertyListResponseSerializer serializer];//    // 让AFN支持json数据的发送//    manager.requestSerializer = [AFJSONRequestSerializer serializer];

AFNetworking实现GET / POST网络请求

1.AFNetworking 网络工具-网络请求的三次封装 OC版

2.AFNetworking 网络工具-网络请求的三次封装 Swift版

AFNetworking实现文件上传

//MARK: 上传头像到服务器- (void)updateIconImage:(UIImage *)newIconImage  {    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    NSString *URLString = [NSString stringWithFormat:@"%@/mobile/uc/updateUsersimg",BaseURLString];    //设备唯一标识符    NSString *deviceid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];    NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];    // file---存到服务器里的字段--// 文件上传的文本信息    NSDictionary *parameters = @{                                 @"deviceid":deviceid,                                 @"file":@"newIconImage.jpg",                                 @"token":token                                 };    [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {        NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];        NSString *path = [documents stringByAppendingPathComponent:@"newIconImage.jpg"];        NSData *data = [NSData dataWithContentsOfFile:path];        // formData : 用于拼接文件上传时的表单数据        [formData appendPartWithFileData:data name:@"file" fileName:@"newIconImage.jpg" mimeType:@"image/jpeg"];    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        NSLog(@"%@",responseObject);    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        NSLog(@"%@",error);    }];}//头像保存到本地- (void)saveIconImageToDocument:(UIImage *)newIconImage withName:(NSString *)newIconImageName {    NSData *imageData = UIImageJPEGRepresentation(newIconImage, 0.5);    NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:newIconImageName];    [imageData writeToFile:fullPath atomically:NO];}

AFNetworking实现文件下载

// MARK: 下载头像- (void)downloadIconImage {    // 1.网络请求管理者    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    // 让AFN返回原始的二进制数据,我们自己来解析    manager.responseSerializer = [AFHTTPResponseSerializer serializer];    NSString *deviceid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];    NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];    if (token == nil) {        return;    }    NSString *URLString = [NSString stringWithFormat:@"%@/mobile/uc/getUsersimg?token=%@&deviceid=%@",BaseURLString,token,deviceid];    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {        // 在这个代码块里面指定文件下载完成之后的缓存路径,指定好了之后,会自动的剪切到completionHandler里面        NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"newIconImage.jpg"];        NSURL *pathURL = [NSURL fileURLWithPath:fullPath];        return pathURL;    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {        //下载完后,从Documents里获取头像,并显示        NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];        NSString *newIconImagePath = [documents stringByAppendingPathComponent:@"newIconImage.jpg"];        UIImage *newIconImage = [UIImage imageWithContentsOfFile:newIconImagePath];        if (newIconImage == nil) {            self.iconImageView.image = [UIImage imageNamed:@"myCenter_placeholder"];        } else {            self.iconImageView.image = newIconImage;        }    }];    [downloadTask resume];}
0 0
原创粉丝点击