iOS怎么使用NSURLConnection实现断点续传下载
发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,本篇内容介绍了"iOS怎么使用NSURLConnection实现断点续传下载"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔
千家信息网最后更新 2024年11月21日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安全错误
数据库的锁怎样保障安全
服务器会主动向浏览器发送信息吗
典型数据库设计案例分析
一休网络技术
db2数据库迁移
为什么国家这么重视网络安全
enlisted西德服务器
数据库中怎么求两个数的和
淮安市软件开发公司
网络安全认证过期怎么办
dell服务器 光驱启动
软件开发一般需要几个人
数据库怎么修改本地服务器名称
数据库实现的论文
山东春考网络技术可以报考的大专
软件开发公司 新三板
南京计算机网络技术学徒
2020年网络安全大学排名
贷款软件开发公司
苏州美旺网络技术
Iswine数据库
主流文档型数据库
郑州电子软件开发
学校信息网络安全保护方案
创建数据库字段为外键
计算机网络技术不会怎么办
一个关于网络安全的英语作文
软件开发一般需要几个人
mysql 数据库 效率
机车车辆与网络技术题库
机械网络技术定制价格