美文网首页程序员
iOS开发-NSURLSessionDownloadTask设置

iOS开发-NSURLSessionDownloadTask设置

作者: 037e3257fa3b | 来源:发表于2017-02-23 19:59 被阅读0次

    通过设置代理我们可以拿到下载进度,对于大文件,我们还需要做到开始、暂停、继续以及取消等相应操作,这篇文章先简单的介绍一下通过代理来实现文件下载的问题:

    #import "ViewController.h"
    
    @interface ViewController ()<NSURLSessionDownloadDelegate>
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self delegate];
    }
    
    -(void)delegate
    {
        //1.url
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_03.png"];
        
        //2.创建请求对象
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //3.创建session :注意代理为NSURLSessionDownloadDelegate
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        
        //4.创建Task
        NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request];
        
        //5.执行Task
        [downloadTask resume];
    }
    
    #pragma mark ----------------------
    #pragma mark NSURLSessionDownloadDelegate
    /**
     *  写数据
     *
     *  @param session                   会话对象
     *  @param downloadTask              下载任务
     *  @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
    {
        //1. 获得文件的下载进度
        NSLog(@"%f",1.0 * totalBytesWritten/totalBytesExpectedToWrite);
    }
    
    /**
     *  当恢复下载的时候调用该方法
     *
     *  @param fileOffset         从什么地方下载
     *  @param expectedTotalBytes 文件的总大小
     */
    -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
    {
        NSLog(@"%s",__func__);
    }
    
    /**
     *  当下载完成的时候调用
     *
     *  @param location     文件的临时存储路径
     */
    -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
    {
        NSLog(@"%@",location);
        
        //1 拼接文件全路径
        NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
        
        //2 剪切文件
        [[NSFileManager defaultManager]moveItemAtURL:location toURL:[NSURL fileURLWithPath:fullPath] error:nil];
        NSLog(@"%@",fullPath);
    }
    
    /**
     *  请求结束
     */
    -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
    {
        NSLog(@"didCompleteWithError");
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:iOS开发-NSURLSessionDownloadTask设置

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