美文网首页
断点下载

断点下载

作者: caohuienjoy | 来源:发表于2016-07-05 21:15 被阅读0次

需要遵循NSURLConnectionDataDelegate协议
/**

  • 当前的长度
    /
    @property (nonatomic ,assign) long long currentLenth;
    /
    *
  • 总体的长度
    /
    @property (nonatomic ,assign) long long totalLenth;
    /
    *
  • 连接类
    /
    @property (nonatomic ,strong) NSURLConnection connection;
    /
  • 文件句柄
    */
    @property (nonatomic, strong) NSFileHandle *writeHandle;
    @property (weak, nonatomic) IBOutlet UISlider *slider;
    @property (weak, nonatomic) IBOutlet UIButton *startOrPause;
  • (void)viewDidLoad{
    [super viewDidLoad];
    NSString *path = [NSSearchPathForDirectorInDomains (NSCacheDirectory,NSUserDomainMask,YES)lastObject];
    NSString *filePath = [path stringByAppendingPathComponent:@"123.rar"]
    NSDictionary *dic = [NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
    self.slider.value = 0;
    }

  • (void)createFilePath{
    //创建文件路径
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];
    NSString *filePath = [path stringByAppendingPathComponent:@"123.rar"];
    // //文件管理器
    NSFileManager *manager = [NSFileManager defaultManager];
    // //用来创建一个空的文件
    [manager createFileAtPath:filePath contents:nil attributes:nil];
    // //创建文件句柄,用来给空文件写入数据
    self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
    }

  • (IBAction)startOrPause:(id)sender {
    UIButton *Btn = sender;
    if (Btn.selected == YES) {
    //取消下载,停止此次下载,如果想继续下载,就需要创建新的连接
    [self.connection cancel];
    [self.writeHandle closeFile];
    self.writeHandle = nil;
    _slider.value = 0;
    }else{

    NSURL *url = [NSURL URLWithString:@"http://gdown.baidu.com/data/wisegame/49b4918a76c8eba0/xunlei_10560.apk"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSString *range = [NSString stringWithFormat:@"bytes=%lld-",self.currentLenth];
    //设置请求头,从上次停止的位置开始下载
    //假如是一个新的下载,那self.currentLenth = 0,从0的位置开始下载
    [request setValue:range forHTTPHeaderField:@"range"];
    self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
    }

    Btn.selected = !Btn.selected;
    }

pragma mark - delegate

  • (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    [self createFilePath];
    //如果self.currentLenth有数据,那么说明他不是第一次下载
    if (self.currentLenth) {
    self.totalLenth = response.expectedContentLength + self.currentLenth;

      return;
    

    }
    //获取到文件的长度
    self.totalLenth = response.expectedContentLength;
    }

  • (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    //移动到文件尾部
    [self.writeHandle seekToEndOfFile];
    //写入数据

    [self.writeHandle writeData:data];
    self.currentLenth += data.length;
    NSLog(@"%f",(float)self.currentLenth/(float)self.totalLenth);
    float sliderValue = (float)self.currentLenth/(float)self.totalLenth;
    [_slider setValue:sliderValue animated:YES];
    }

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    self.currentLenth = 0;
    self.totalLenth = 0;
    NSLog(@"%lld---%lld",self.currentLenth,self.totalLenth);
    //关闭文件句柄
    [self.writeHandle closeFile];
    self.writeHandle = nil;
    self.slider.value = 0;
    self.startOrPause.selected = NO;
    }

  • (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

相关文章

  • 基于Okhttp实现断点下载(续传)和分片下载

    断点下载/续传 断点下载是针对下载大文件需求的一种优化机制,可以从上次下载的断点处继续下载。断点续传原理也相同,只...

  • 断点下载

    效果图 断点下载的过程 这里是简单的一个下载,下一篇介绍列表的断点下载1.绘制UI图,并初始化控件2.创建实体类:...

  • 断点下载

    今天做了断点下载视频或者MP3,具体实现如下 1、主要应用了NSURLSessionDownloadTask和NS...

  • 断点下载

    链接转载;判断当前Service是否是重启的Servciehttp://blog.csdn.net/luyi325...

  • 断点下载

    http://www.jianshu.com/p/f65e32012f07

  • 断点下载

    断点下载重点 利用HTTP请求头的Range属性,就可以实现从指定位置开始下载表示头500个字节:Range: b...

  • 断点下载

    需要遵循NSURLConnectionDataDelegate协议/** 当前的长度/@property (no...

  • 断点下载

  • OC网络:NSURLSession-downloadTask的断

    NSURLSessionDownloadDelegate断点下载说明: 能实现断点下载,即在程序不退出的情况下:暂...

  • Android下载文件(一)下载进度&断点续传

    索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)多线程并发&断点续传(待续) A...

网友评论

      本文标题:断点下载

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