iOS-->Download类的基本使用

iOS-->Download类的基本使用_第1张图片
201406041133326.jpg

Download类的基本使用

download下载类是系统自带的下载类,它可以将会话对象封装成一个下载任务,它不需要文件句柄也不需要输出流就能实现文件的下载,但它把文件下载结束之后会将文件放在一个temp临时路径里,而且这个路径下的文件会随时被系统删除,因此,为了保证文件的安全性,我们需要手动将下载好的文件移动到安全的路径下。具体代码如下:

-(void)download1{
    //创建请求路径
    NSURL *url=[NSURL URLWithString:@"http://6:32812/resources/images/minion_01.png"];
    //创建请求对象
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    //创建会话对象
    NSURLSession *session=[NSURLSession sharedSession];

    //根据会话对象来创建下载任务
    NSURLSessionDownloadTask *downloadTask=[session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSLog(@"%@",location);
        //拼接要拷贝到的目的路径,因为数据默认是放在一个临时路径下面,临时路径不安全,因为会随时被删除
        NSString *path=[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:response.suggestedFilename];
        NSURL *url=[NSURL fileURLWithPath:path];
        //移动文件
        [[NSFileManager defaultManager]moveItemAtURL:location toURL:url error:nil];
        NSLog(@"%@",url);
    }];
    //提交任务
    [downloadTask resume];



}

除了上面那个方法外,我们还可以通过代理的方法实现,而且使用代理还可以监听文件的下载进度:

-(void)download2{
    //确定请求路径
    NSURL *url=[NSURL URLWithString:@"http://120.32812/resources/images/minion_01.png"];

    //创建请求对象
    NSURLRequest *request=[NSURLRequest requestWithURL:url];

    //创建会话对象并设置代理
    NSURLSession *session=[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc]init]];

    //根据会话对象创建请求任务
    NSURLSessionDownloadTask *downloadTask=[session downloadTaskWithRequest:request];
    [downloadTask resume];
}
// bytesWritten :本次写入的数据大小  totalBytesWritten:写入的总大小
// totalBytesExpectedToWrite :需要下载的数据的总大小
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    //监听文件下载进度
    NSLog(@"%f",1.0*totalBytesWritten/totalBytesExpectedToWrite);
}
//下载完成的时候调用
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    //剪切文件到安全的位置
    NSString *path=[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
    NSURL *fullPath=[NSURL fileURLWithPath:path];

    [[NSFileManager defaultManager]moveItemAtURL:location toURL:fullPath error:nil];
    NSLog(@"%@",fullPath);

}
//请求结束的时候调用(并不是发生错误的时候才调用)
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    NSLog(@"---------");
}

你可能感兴趣的:(iOS-->Download类的基本使用)