AFNetworking3.0改变之图片语音上传下载
2016-07-15 17:15
429 查看
AFNetworking自从3.0版本开始发生了一些重大变化。具体的变化请参考AFNetworking对应的文档(这里发不了链接,最近mac登不上github)
如果真要迁移旧代码或者新项目中使用,建议去仔细阅读说明。目前网上所搜索的一些使用方法绝大多数是2.X版本的。这里就简单介绍一下图片和语音文件上传和下载的具体使用,对于不想阅读英文或想着快速集成的小伙伴们会有帮助。
弃用的类
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
UIWebView+AFNetworking
UIButton+AFNetworking
下面介绍具体用例:
- (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"
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];
}
如果真要迁移旧代码或者新项目中使用,建议去仔细阅读说明。目前网上所搜索的一些使用方法绝大多数是2.X版本的。这里就简单介绍一下图片和语音文件上传和下载的具体使用,对于不想阅读英文或想着快速集成的小伙伴们会有帮助。
弃用的类
AFURLConnectionOperationAFHTTPRequestOperation
AFHTTPRequestOperationManager
修改的类
UIImageView+AFNetworkingUIWebView+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 *)urlStrcomplete:(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];
}
相关文章推荐
- bzoj1003物流运输
- 多重邻接表
- C#数组的声明方式
- 设计模式--5.1 代理模式--入门
- Android 中图可以用到的图片处理类 BitmapUtils
- Java super关键字详解
- web.py – 网页跳转
- RecyclerView点击,长按,滑动监听。
- 挑战 POJ.2991 Crane
- phonegap plugin.xml 示例
- Java 序列化与反序列化 学习手札
- jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
- Salesforce.com Object Query Language (SOQL) 示例
- July 15th 模拟赛C T2 积木游戏 Solution
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- iTunes Connect新应用发布流程
- 零散知识点:菜鸟与高手的区别
- 观察者模式在android 上的最佳实践
- 关于 java.io.OptionalDataException
- Objective-C与Swift混编中OC对Swift类视而不见的问题