iOS怎么使用NSURLConnection实现断点续传下载
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本篇内容介绍了"iOS怎么使用NSURLConnection实现断点续传下载"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔
千家信息网最后更新 2025年11月09日iOS怎么使用NSURLConnection实现断点续传下载
本篇内容介绍了"iOS怎么使用NSURLConnection实现断点续传下载"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一.断点续传的原理
断点续传的原理:每次在想服务器请求下载数据的同时,要告诉服务器从整个下载文件的数据流的某个还未下载的位置开始下载,然后服务器就返回从哪个位置开始的数据流
二.断点续传的实现
第一步:先声明一些属性
fileprivate var totalSize: Int64 = 0 // 总大小fileprivate var currentSize: Int64 = 0 // 当前大小fileprivate var fileName: String? // 文件名fileprivate var fullPath: String? // 文件路劲fileprivate var handle: FileHandle? // 句柄fileprivate var connection: NSURLConnection?
第二步:创建URL和请求
关键是设置请求头
// 下载文件func urlConnectionDownload(_ url: String) -> NSURLConnection? { var request = URLRequest(url: URL(string: url)!) // 设置请求头信息 /* bytes=0-1000 表示下载0-1000的数据 bytes=0- 表示从0开始下载直到下载完毕 bytes=100- 表示从100开始下载直到下载完毕 */ request.setValue("bytes=\(currentSize)", forHTTPHeaderField: "Range") // 发送异步请求 connection = NSURLConnection(request: request, delegate: self) return connection } // 取消下载文件 func urlConnectionCacel() { connection?.cancel() }第三步:设置代理NSURLConnectionDataDelegate
第四步:实现代理NSURLConnectionDataDelegate方法
// 接收到响应头信息的时候就会调用(最先调用的方法),只会调用一次 func connection(_ connection: NSURLConnection, didReceive response: URLResponse) { print("didReceive response") // 判断是否已经下载过了 if currentSize > 0 { // 已经下载过的话,就不需要再次接受response了 return } // 文件的总大小 totalSize = response.expectedContentLength // 得到的文件名称 fileName = response.suggestedFilename // 边接收数据边写文件到沙盒中 // 1. 获取文件的全路径 if let cache = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last { let nsCache = cache as NSString fullPath = nsCache.appendingPathComponent(fileName!) // 创建一个空的文件 FileManager.default.createFile(atPath: fullPath!, contents: nil, attributes: nil) // 创建句柄 handle = FileHandle(forWritingAtPath: fullPath!) } } func connection(_ connection: NSURLConnection, didReceive data: Data) { print("didReceive data") // 把文件句柄移动到文件的末尾 handle?.seekToEndOfFile() // 使用文件句柄写数据 handle?.write(data) currentSize += data.count print(currentSize / totalSize) } func connectionDidFinishLoading(_ connection: NSURLConnection) { print("didFinish loading") print(fullPath!) handle?.closeFile() handle = nil }"iOS怎么使用NSURLConnection实现断点续传下载"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
文件
数据
断点
句柄
大小
服务器
服务
位置
信息
内容
原理
数据流
方法
更多
知识
代理
实用
学有所成
接下来
关键
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库的两个实例一样
万方数据库pdf密码
网络安全师考cs
php代码定时入数据库
分布式数据库应该考虑哪些问题
计算机网络技术专业笔记本
学生选课系统数据库
找软件开发的工作
关系数据库二维表哪两部分
中国人民公安大学网络安全工程
烟台设备程序软件开发
网络安全贡献奖状样板
语音数据库标注是什么意思
科技赋能互联网贷款
网络安全宣传翼支付
有哪些自学的软件开发
乡镇开展网络安全
我的世界服务器必备指令 商城
网络技术大专就业
linux 退出数据库
中国网络安全办公室盛
嘉定区网络技术服务是什么
Sybase数据库软件使用
h3c服务器存储告警
浙江优弧网络技术有限公司
时间服务器的构造
金晴云华网络安全
华为g5500服务器内存
mysql打开数据库语句
网络安全知识普及手抄报