您的位置:首页 > 其它

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

2016-07-15 17:15 429 查看
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*)data
imageName:(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 *)urlStr
complete:(void(^)(NSURL *filePath))voiceFilePath
fail:(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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: