iOS 设置下载部分文件,如何获取完整文件的大小

这篇具有很好参考价值的文章主要介绍了iOS 设置下载部分文件,如何获取完整文件的大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在视频的需求中,遇到这样一个需求,播放一视频的时候,要预下载
后面10条视频,但是只下载后面十条视频的前面1M

实现方法
1 创建请求时设置cacheLength

    resource = [[IdiotResource alloc] init];
        resource.requestURL = task.requestURL;
        resource.requestOffset = task.requestOffset;
        resource.fileLength = task.fileLength;
        resource.cachePath = task.cachePath;
        //预先下载1M
        resource.cacheLength = 1024 * 1024;
        resource.resourceType = IdiotResourceTypeNet;//网络资源
        [self.resources addObject:resource];

二 创建请求时,设置 请求头的Range

- (void)fetchFromNetwork:(IdiotResource *)task withResource:(IdiotResource *)resource{
    
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[resource.requestURL originalSchemeURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
    if (resource.cacheLength > 0) {
        [request addValue:[NSString stringWithFormat:@"bytes=%lld-%lld", MAX(resource.requestOffset, task.requestOffset + task.cacheLength), resource.requestOffset+resource.cacheLength-1] forHTTPHeaderField:@"Range"];
    }else{
        [request addValue:[NSString stringWithFormat:@"bytes=%lld-", resource.requestOffset] forHTTPHeaderField:@"Range"];
    }
    NSURLSessionDataTask * datatask = [self.session dataTaskWithRequest:request];
    datatask.taskDescription = [NSString stringWithFormat:@"%lld",task.requestOffset];
    [datatask resume];
    
    self.currentDataTask = datatask;
}

三 如何获取完整文件的大小

在 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
代理方法里面
通过获取响应头的 Content-Range 字段来获取,注意,不能通过
Content-Length来获取,因为这个时候Content-Length 是我们设置的请求部分的大小,不是完整的大小

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    
    IdiotResource * task = [self.taskDic objectForKey:dataTask.taskDescription];
    
    if (task.cancel) return;
    
    if (task.fileLength <= 0) {
        NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *)response;
        NSString * contentRange = [[httpResponse allHeaderFields] objectForKey:@"Content-Range"];
        NSString * fileLength = [[contentRange componentsSeparatedByString:@"/"] lastObject];
        task.fileLength = fileLength.integerValue > 0 ? fileLength.integerValue : response.expectedContentLength;
    }
    
    if (self.currentResource.fileLength <= 0) {
        self.currentResource.fileLength = task.fileLength;
    }
    
    if (!task.cachePath.length) {
        task.cachePath = [IdiotFileManager createSliceWithUrl:task.requestURL sliceName:[NSString stringWithFormat:@"%lld-%lld",task.requestOffset,task.fileLength]];
    }
    
    if (self.currentResource.cacheLength <= 0) {
        self.currentResource.cacheLength = task.fileLength - task.requestOffset;
    }
    
    completionHandler(NSURLSessionResponseAllow);
}

如下图,所示
iOS 设置下载部分文件,如何获取完整文件的大小,ios,cocoa,macos文章来源地址https://www.toymoban.com/news/detail-692168.html

到了这里,关于iOS 设置下载部分文件,如何获取完整文件的大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS长宽不一致图片,设置圆角并裁切多余部分

    问题: 直接设置圆角的话,如果所选图片长宽不一致,会导致展示的图片畸形,不是我们所想要的圆角 解决方案:  如果想要圆角完整显示,在代码中加入 _avatarIcon.contentMode = UIViewContentModeScaleAspectFill;  UIViewContentModeScaleAspectFill表示按比例缩放并且填满view,意味着图片可能

    2024年01月23日
    浏览(35)
  • Java获取上传的文件大小并且转换对文件大小进行单位转化

    今天产品提出来一个需求,上传文件的时候要记录文件的大小,并且保存到数据库里面。 正好借着这个机会,分享下对文件大小进行单位转化的一个方法。 一般和前后端进行文件交互,都是通过MultipartFile实现的,它有一个方法:getSize() 无需参数,返回的是该文件Long类型的

    2024年02月16日
    浏览(28)
  • elementUI实现上传视频时获取视频时长以及设置视频格式、大小限制

    在 before-upload 属性绑定的事件中可以获取上传视频的信息对象,通过给这个信息对象内的属性添加判断条件就可以实现对视频的格式及大小进行限制。对于视频时长,也包含在信息对象中,根据下面代码所示方法提取即可。 想了解如何给上传图片添加限制的小伙伴,可以查看

    2024年02月14日
    浏览(36)
  • 获取文件大小并转换单位

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 此番功能调试基于springboot项目demo,如需搭建springboot请参考: springboot搭建 注:由于

    2024年02月13日
    浏览(46)
  • 关于iOS:如何使用SwiftUI调整图片大小?

    我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像? 我试图设置框架,但不起作用: 1 2 Image(room.thumbnailImage)     .frame(width: 32.0, height: 32.0) 在Image上应用任何大小修改之前,应使用.resizable()。 1 2 Image(room.thumbnailImage).resizable() .frame(width: 32.0, height: 3

    2024年02月05日
    浏览(30)
  • MultipartFile获取文件名,文件大小,文件后缀等方法

    获取文件名及后缀信息: 获取文件名: 获取文件后缀:这个后缀带‘.’如:.zip,如果不想带‘.’这样即可lastIndexOf(\\\".\\\")+1 获取文件类型: 获取文件大小:

    2024年02月16日
    浏览(44)
  • Qt 常用方法 获取磁盘总大小、可用空间、文件夹大小 文件大小B KB M G转换

    1.通过QFile获取文件大小 注意:返回的是字节个数 通过QFileInfo获取文件大小 2. 获取磁盘空间 3 .获取选择路径下总文件大小 4. 转换大小单位 bit  === byte   bit / 8 byte === KB byte / 1024 KB = MB KB / 1024 MB = GB MB / 1024 GB === TB GB / 1024

    2024年02月06日
    浏览(54)
  • minio设置文件上传大小

    在application.properties配置文件当中加入 测试:, 上传大于1M的文件,报错信息提示上传文件超过了规定大小。

    2024年02月12日
    浏览(26)
  • 从Github中下载部分文件

    我们经常回去Github中下载代码,但仓库中存在很多project代码。但我们如果只需要某一个或几个项目的代码,此时应该如何操作呢? 这里介绍两款工具,可以从仓库中下载部分文件的小工具: DownGit 和 GitZip downGit 国内镜像: https://www.itsvse.com/downgit/#/home 打开DownGit网页之后,只

    2024年02月04日
    浏览(39)
  • 在Python中获取文件的大小4种办法

    这篇文章将讨论如何在 Python 中获取文件的大小。 获取文件状态的标准解决方案是使用 os.stat() Python 函数。它返回一个 stat_result 对象,它有一个 st_size 包含文件大小(以字节为单位)的属性。 或者,使用 Python 3.4,您可以使用 Path.stat() 函数来自 pathlib 模块。它类似于 os.sta

    2024年02月13日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包