美文网首页
离线缓存

离线缓存

作者: Roger_max | 来源:发表于2018-10-23 10:07 被阅读10次

实现数据的离线缓存,当在建立起数据请求的时候,根据url生成一个文件路径,让数据下载到一个临时的文件路径下。

  • 第一种情况:当请求发起时一直下载到下载成功,这时候就将该文件移动到缓存目录下缓存起来。
  • 第二种情况:当中断下载数据时,对该临时文件不做任何处理,然后再次播放该视频请求数据时,根据url生成的路径查找当前的临时路径下有无该文件,如果有说明该文件没有下载完成,则需要读到这个文件然后做断点续传操作,让该文件继续下载,而不是重头开始下载。
- (void)fileJudge{
    //判断当前目录下有无已有下载的临时文件
    if ([_fileManager fileExistsAtPath:self.videoTempPath]) {
        //存在已下载数据的文件
        _fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:self.videoTempPath];
        _curruentLength = [_fileHandle seekToEndOfFile];
        
    }else{
        //不存在文件
        _curruentLength = 0;
        //创建文件
        [_fileManager createFileAtPath:self.videoTempPath contents:nil attributes:nil];
        _fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:self.videoTempPath];
    }
    //发起请求
    [self sendHttpRequst];
}
//网路请求方法
- (void)sendHttpRequst
{
    [_fileHandle seekToEndOfFile];
    NSURL *url = [NSURL URLWithString:_videoUrl];
    NSMutableURLRequest *requeset = [NSMutableURLRequest requestWithURL:url];
    
    //指定头信息  当前已下载的进度
    [requeset setValue:[NSString stringWithFormat:@"bytes=%ld-", _curruentLength] forHTTPHeaderField:@"Range"];
    
    //创建请求
    NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:requeset];
    self.dataTask = dataTask;
    
    //发起请求
    [self.dataTask resume];
}

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    
    if (error == nil) { //下载成功
        //当前下载文件的临时路径
        NSURL *tempPathURL = [NSURL fileURLWithPath:self.videoTempPath];
        //缓存路径
        NSURL *cachefileURL = [NSURL fileURLWithPath:self.videoCachePath];

        // 如果没有该文件夹,创建文件夹
        if (![self.fileManager fileExistsAtPath:self.videoCachePath]) {
            [self.fileManager createDirectoryAtPath:self.videoCachePath withIntermediateDirectories:YES attributes:nil error:nil];
        }
        
        // 如果该路径下文件已经存在,就要先将其移除,在移动文件
        if ([self.fileManager fileExistsAtPath:[cachefileURL path] isDirectory:NULL]) {
            [self.fileManager removeItemAtURL:cachefileURL error:NULL];
        }
        //移动文件至缓存目录
        [self.fileManager moveItemAtURL:tempPathURL toURL:cachefileURL error:NULL];
    }
}

参考文章
延伸扩展

相关文章

  • H5 离线缓存

    离线缓存 什么是离线缓存,为什么要用它?这是我们需要思考的问题。 顾名思义,离线缓存,就是离线了你的东西内容也缓存...

  • iOS获取App缓存文件的大小并清除缓存

    App在处理网络资源时,一般都会做离线缓存处理,其中最典型离线缓存框架为SDWebImage。 但是,离线缓存会占...

  • 离线缓存manifest用于前端优化

    离线缓存 离线缓存又叫“ApplicationCache”,是从浏览器缓存中分出来一块缓存区,用来存储一定的资源。...

  • 3.7 离线应用

    3.7 离线应用 问题一:什么是离线应用? 离线应用是指通过离线缓存技术,让资源在第一次被加载后缓存在本地,下次访...

  • SqlLite数据库

    一、数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等。离线缓存一般都是把数据保存到...

  • iOS学习笔记16-数据库SQLite

    一、数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等。离线缓存一般都是把数据保存到...

  • HTML5离线缓存相关文章

    HTML离线缓存-manifest简介有趣的HTML5: 离线存储

  • 网络接口缓存方案

    为什么要加入离线缓存 使用何种方式存储数据 离线缓存的思路: 需要注意的点: @end 具体使用

  • iOS开发本地缓存(数据离线缓存、读取、释放)

    iOS开发本地缓存(数据离线缓存、读取、释放)_异客_新浪博客

  • 通过vite-plugin-pwa配置了解pwa

    前提:多页面vite项目给native提供h5页面,设置离线缓存优化体验 实现service worker离线缓存...

网友评论

      本文标题:离线缓存

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