iOS-->Download类的基本使用

作者: 奕十八 | 来源:发表于2016-07-23 21:10 被阅读1166次
    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类的基本使用

        本文链接:https://www.haomeiwen.com/subject/pvywjttx.html