iOS怎么使用NSURLConnection实现断点续传下载
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"iOS怎么使用NSURLConnection实现断点续传下载"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
网络安全德育实践课PPT
数据库的闭包
软件开发流程 报告
云服务器第三方管理工具
丹东新零售软件开发哪家好
福建加工软件开发价格走势
王者联盟服务器维护中
10台电脑服务器
漫说网络安全是真的吗
诊疗中心数据库管理规范
期权软件开发平台
怎么开启mysql数据库
攀枝花网络技术价目表
nfc饭卡数据库丢失
湖北浪潮服务器维修调试哪家好
软件工程提出的软件开发方法
数据分析和网络安全
邮编数据库 excel
三调用的什么数据库
hive数据库怎么给表增加字段
Wmn 网络安全产品
如何办网络安全手抄报
怀旧服服务器状态查询软件
网络安全与 管理课后答案
互联网科技成果展馆
手机如何关闭数据库服务
网络安全有你有我手抄报内容
佰灵达网络技术服务部
我的世界滑稽服务器
宝鸡市软件开发行情