AFNetworking3.0改变之图片语音上传下载

来源:互联网 发布:qq酷双项淘宝客加盟 编辑:程序博客网 时间:2024/06/12 23:43

AFNetworking自从3.0版本开始发生了一些重大变化。具体的变化请参考AFNetworking对应的文档(这里发不了链接,最近mac登不上github)

如果真要迁移旧代码或者新项目中使用,建议去仔细阅读说明。目前网上所搜索的一些使用方法绝大多数是2.X版本的。这里就简单介绍一下图片和语音文件上传和下载的具体使用,对于不想阅读英文或想着快速集成的小伙伴们会有帮助。


弃用的类

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

修改的类

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking
  • UIButton+AFNetworking

下面介绍具体用例:

图片上传

这里要注意,之前的AFHTTPRequestOperationManager 已经改为AFHTTPSessionManager

- (void)httpPostImage:(NSString*)urlStr andImageData:(NSMutableData*)dataimageName:(NSString *)fileName complete:(void(^)(NSString *partUrl))partUrl fail:(void(^)(NSString *error))fail {if (!data) {return;}NSDictionary *parameters = @{@"productid":@"PRODUCT_MOBILE", @"taskid":@"0"};AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:urlStr parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {[formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"image/jpeg"];} progress:^(NSProgress * _Nonnull uploadProgress) {} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {fail(@"发送失败,请检查网络");}];}

这是一个图片上传方法,图片数据以NSData的形式传进来,请求带了几个参数,用parameters载体传递进去。

[formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"image/jpeg"];

这句是载入图片数据。要注意的是最后一个参数@"image/jpeg",这个参数对应的是jpg格式的图片,如果是别的格式,最后一个参数则要替换成别的,总共有这么写种类:

 - `image/tiff`
 - `image/jpeg`
 - `image/gif`
 - `image/png`
 - `image/ico`
 - `image/x-icon`
 - `image/bmp`
 - `image/x-bmp`
 - `image/x-xbitmap`
 - `image/x-win-bitmap`

以及 "application/json", "text/json", "text/javascript","text/html"

语音上传

语音上传和图片上传使用AFNetworking的方法是一样,格式就参照图片发送。要注意的是,mimeType参数要换了,如果是以xml格式传输,就换成"text/html",json传输,换成"text/json"。

文件下载

- (void)downloadVoiceWithUrl:(NSString *)urlStrcomplete:(void(^)(NSURL *filePath))voiceFilePathfail:(void(^)(NSString *error))fail {NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];NSURL *url = [NSURL URLWithString:urlStr];NSURLRequest *request = [NSURLRequest requestWithURL:url];NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {NSURL *dirURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];return [dirURL URLByAppendingPathComponent:[response suggestedFilename]];} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {if (error) {NSLog(@"error:%@",error);fail(@"");} else {NSLog(@"filePath:%@",filePath);voiceFilePath(filePath);}}];[task resume];}


0 0