AFNetworking实现文件下载和文件上传
2017-04-11 本文已影响6143人
红茶绅士
文件下载
//创建传话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://cn.bing.com/az/hprichbg/rb/WindmillLighthouse_ZH-CN12870536851_1920x1080.jpg"]];
//下载文件
/*
第一个参数:请求对象
第二个参数:progress 进度回调
第三个参数:destination 回调(目标位置)
有返回值
targetPath:临时文件路径
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];
return [NSURL fileURLWithPath:fullPath];
}
completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSLog(@"%@",filePath);
}];
//执行Task
[download resume];
文件上传
//创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送post请求上传路径
/*
第一个参数:请求路径
第二个参数:字典(非文件参数)
第三个参数:constructingBodyWithBlock 处理要上传的文件数据
第四个参数:进度回调
第五个参数:成功回调 responseObject响应体信息
第六个参数:失败回调
*/
[manager POST:@"服务器ip" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
UIImage *image = [UIImage imageNamed:@"xxx.png"];
NSData *imageData = UIImagePNGRepresentation(image);
//使用formData拼接数据
/* 方法一:
第一个参数:二进制数据 要上传的文件参数
第二个参数:服务器规定的
第三个参数:文件上传到服务器以什么名称保存
*/
[formData appendPartWithFileData:imageData name:@"file" fileName:@"xxx.png" mimeType:@"image/png"];
//方法二:
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
//方法三:
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" error:nil];
}
progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
}
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上传成功.%@",responseObject);
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败.%@",error);
}];