1.使用AFN上傳數(shù)據(jù)
1,創(chuàng)建會(huì)話管理者對(duì)象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2,發(fā)送POST請(qǐng)求上傳
//非文件參數(shù)
NSDictionary *dict = @{@"username":@"jyq"};
/*
第一個(gè)參數(shù):請(qǐng)求路徑
第二個(gè)參數(shù):非文件參數(shù) username(參數(shù)名) (傳NSDictionary)
第三個(gè)參數(shù):constructingBodyWithBlock 在該block中告訴AFN要上傳的文件數(shù)據(jù)信息
第四個(gè)參數(shù):progress 進(jìn)度回調(diào)
第五個(gè)參數(shù):success 成功后的回調(diào)
第六個(gè)參數(shù):failure 失敗后的回調(diào)
*/
[manager POST:@"http://xxx" parameters:dict constructingBodyWithBlock:
^(id<AFMultipartFormData> _Nonnull formData) {
/*
第一個(gè)參數(shù):文件的URL路徑
第二個(gè)參數(shù):參數(shù)名稱 file
第三個(gè)參數(shù):在服務(wù)器上的名稱
第四個(gè)參數(shù):文件的類型
*/
[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) {
//計(jì)算文件的上傳進(jìn)度
NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//responseObject 響應(yīng)體信息(默認(rèn)已經(jīng)完成了JSON的解析,是一個(gè)OC對(duì)象)
NSLog(@"上傳成功---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上傳失敗---%@",error);
}];
2.使用AFN下載數(shù)據(jù)
1,創(chuàng)建會(huì)話管理者對(duì)象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2,創(chuàng)建請(qǐng)求對(duì)象
NSURL *url = [NSURL URLWithString:@"http://xxx"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
3,發(fā)送POST請(qǐng)求上傳
/*
第一個(gè)參數(shù):請(qǐng)求對(duì)象
第二個(gè)參數(shù):progress 進(jìn)度回調(diào)
第三個(gè)參數(shù):destination--(downloadTask-)
在該block中告訴AFN應(yīng)該把文件存放在什么位置,AFN內(nèi)部會(huì)自動(dòng)的完成文件的剪切處理
targetPath:文件的臨時(shí)存儲(chǔ)路徑(tmp)
response:響應(yīng)頭信息
返回值:文件的最終存儲(chǔ)路徑
第四個(gè)參數(shù):completionHandler 完成之后的回調(diào)
filePath:文件路徑 == 返回值
*/
NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:
^(NSProgress * _Nonnull downloadProgress) {
//進(jìn)度回調(diào),可在此監(jiān)聽下載進(jìn)度(已經(jīng)下載的大小/文件總大小)
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];
補(bǔ)充:AFN可以使用KVO監(jiān)聽方法, 可監(jiān)聽下載進(jìn)度等
[download addObserver:<#(nonnull NSObject *)#> forKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>]