您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: