iOS怎么使用NSURLConnection实现断点续传下载
发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,本篇内容介绍了"iOS怎么使用NSURLConnection实现断点续传下载"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔
千家信息网最后更新 2024年09月23日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小插图
数据库安全基准
手机工作平台软件开发采购方案
服务器肉鸡出售
网络安全部署项目经验
南京运营网络技术咨询热线
湖北企业软件开发排名
万网服务器ip
小学数据库更新异常怎么办
dede数据库导入少数据库
信息网络安全带
软件开发甲方谈判
网络长连接db2连不上数据库
计算机网络技术以后就业方向
软件开发有哪些难点
网络安全信息设备管理制度
网络安全太强大怎么解决
腾讯企业邮箱服务器
手游我的世界如何创造服务器
乡镇网络安全应急
国家网络安全教育周教育材料
韩国网络安全水平
大数据时代的数据库
武汉远程教育系统开发软件开发
网络文明与网络安全教育心得
斗破苍穹服务器
sa无法明确数据库
北邮数据库原理与应用教材