NSURLSession实现下载(代理)
2014-12-01 23:46
183 查看
NSURLSession实现下载(代理)
- (void)downloadTask2{
{
NSURLSessionConfiguration
*cfg = [NSURLSessionConfiguration
defaultSessionConfiguration];
// 1.得到session对象
NSURLSession *session = [NSURLSession
sessionWithConfiguration:cfg
delegate:self
delegateQueue:[NSOperationQueue
mainQueue]];
// 2.创建一个下载task
NSURL *url = [NSURL
URLWithString:@"http://localhost:8080/MJServer/resources/test.mp4"];
// NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
// NSLog(@"%@",location);
// }];
NSURLSessionDownloadTask
*task = [session
downloadTaskWithURL:url];
// 3.开始任务
[task
resume];
//
如果给下载任务设置了completionHandler这个block,也实现了下载的代理方法,优先执行block
}
注意:
NSURLSessionDownloadTask下载完成之后,将数据保存在沙盒里面的tmp临时文件中,需要将临时文件将临时文件剪切或者复制Caches文件夹。
#pragma mark - NSURLSessionDownloadDelegate
/**
*
下载完毕后调用
*
*
@param
location
临时文件的路径(下载好的文件)
*/
- (void)URLSession:(NSURLSession
*)session downloadTask:(NSURLSessionDownloadTask
*)downloadTask didFinishDownloadingToURL:(NSURL
*)location
{
// location :
临时文件的路径(下载好的文件)
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask,
YES)
lastObject];
// response.suggestedFilename
:
建议使用的文件名,一般跟服务器端的文件名一致
NSString *file = [caches
stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
//
将临时文件剪切或者复制Caches文件夹
NSFileManager *mgr = [NSFileManager
defaultManager];
// AtPath :
剪切前的文件路径
// ToPath :
剪切后的文件路径
[mgr
moveItemAtPath:location.path
toPath:file
error:nil];
}
/**
*
恢复下载时调用
*/
- (void)URLSession:(NSURLSession
*)session downloadTask:(NSURLSessionDownloadTask
*)downloadTask didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes
{
}
/**
*
每当下载完(写完)一部分时就会调用(可能会被调用多次)
*
*
@param
bytesWritten
这次调用写了多少
*
@param
totalBytesWritten
累计写了多少长度到沙盒中了
*
@param
totalBytesExpectedToWrite
文件的总长度
*/
- (void)URLSession:(NSURLSession
*)session downloadTask:(NSURLSessionDownloadTask
*)downloadTask didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
double progress = (double)totalBytesWritten
/ totalBytesExpectedToWrite;
NSLog(@"下载进度---%f",
progress);
}
相关文章推荐
- NSURLSession实现下载(代理)
- HTTP代理实现请求报文的拦截与篡改9--实现篡改功能后的演示+源码下载
- HTTP代理实现请求报文的拦截与篡改2--功能介绍+源码下载
- NSURLConnection使用代理实现跟踪下载进度,分段写入解决下载峰值
- 使用NSURLSession实现下载的进度
- 通过NSURLSessionDownloadTask代理实现下载大文件
- 重构桌面飘着圣诞老人,利用策略模式和改造的代理模式让软件完全实现开闭原则,欢迎下载源代码分析
- NSURLSession实现文件下载和文件上传
- iOS - NSURLSession实现断点续传下载
- NSURLSession解决下载中的进度跟进问题——通过实现NSURLSessionDownloadDelegate协议中的回调方法
- iOS开发-使用NSURLSession实现文件断点下载,文件离线续传以及图片上传
- ftp4j 实现 上传下载 代理 断点续传
- NSURLSession实现下载(不能看到下载进度)
- NSURLSession无法实现断点续传下载的问题解决
- java实现代理domino web邮件下载
- Servlet实现代理文件下载
- IOS分别利用NSURLSession和AFNetworking实现下载文件
- iOS开发 - NSURLSession实现断点续传下载
- NSURLSession实现图片下载
- NSURLSession下载文件-代理方式