1.使用AFN上传数据
1,创建会话管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2,发送POST请求上传
//非文件参数
NSDictionary *dict = @{@"username":@"jyq"};
/*
第一个参数:请求路径
第二个参数:非文件参数 username(参数名) (传NSDictionary)
第三个参数:constructingBodyWithBlock 在该block中告诉AFN要上传的文件数据信息
第四个参数:progress 进度回调
第五个参数:success 成功后的回调
第六个参数:failure 失败后的回调
*/
[manager POST:@"http://xxx" parameters:dict constructingBodyWithBlock:
^(id<AFMultipartFormData> _Nonnull formData) {
/*
第一个参数:文件的URL路径
第二个参数:参数名称 file
第三个参数:在服务器上的名称
第四个参数:文件的类型
*/
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/User/Desktop/屏幕快照 2016-03-28 下午11.35.03.png"]
name:@"file" fileName:@"123.png" mimeType:@"image/png" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//计算文件的上传进度
NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//responseObject 响应体信息(默认已经完成了JSON的解析,是一个OC对象)
NSLog(@"上传成功---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败---%@",error);
}];
2.使用AFN下载数据
1,创建会话管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2,创建请求对象
NSURL *url = [NSURL URLWithString:@"http://xxx"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
3,发送POST请求上传
/*
第一个参数:请求对象
第二个参数:progress 进度回调
第三个参数:destination--(downloadTask-)
在该block中告诉AFN应该把文件存放在什么位置,AFN内部会自动的完成文件的剪切处理
targetPath:文件的临时存储路径(tmp)
response:响应头信息
返回值:文件的最终存储路径
第四个参数:completionHandler 完成之后的回调
filePath:文件路径 == 返回值
*/
NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:
^(NSProgress * _Nonnull downloadProgress) {
//进度回调,可在此监听下载进度(已经下载的大小/文件总大小)
NSLog(@"%f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull
targetPath, NSURLResponse * _Nonnull response) {
NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
NSLog(@"targetPath:%@",targetPath);
NSLog(@"fullPath:%@",fullPath);
return [NSURL fileURLWithPath:fullPath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath,
NSError * _Nullable error) {
NSLog(@"filePath:%@",filePath);
}];
[download resume];
补充:AFN可以使用KVO监听方法, 可监听下载进度等
[download addObserver:<#(nonnull NSObject *)#> forKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>]
网友评论
NSError * _Nullable error) {
NSLog(@"filePath:%@",filePath);
}];
这个地方的Error不处理吗