JHDownloadManager 1.0.2

JHDownloadManager 1.0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年7月
SPM支持 SPM

James Huynh 维护。



 
依赖
FileMD5Hash~> 2.0.0
ReachabilitySwift~> 2.3.3
 

JHDownloadManager

安装

JHDownloadManager 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中

pod "JHDownloadManager", "~> 1.0.2"

功能

  • 能够下载文件组。
  • 哈希(MD5、SHA1、SHA512)/ 文件大小一旦下载完成即进行验证。如果哈希值/文件大小不匹配,将自动重新下载文件。
  • 网络连接恢复时的自动续传。
  • 总体进度和单个下载进度
  • 下载速率计算
  • 剩余时间计算

使用

JHDownloadManager

JHDownloadManager 可以对一批 URL 字符串或 NSURL 对象执行下载。

  • 在每条下载信息中,URL 和目标地址是必填的。《url》可以是字符串或 NSURL 对象
  • 如果未提供 fileSize,下载管理器将触发一个 HEAD 请求来查询内容长度,以填充《fileSize》。
  • 如果提供了校验和,下载管理器将验证与下载文件的校验和。如果没有提供校验和,验证将仅基于 fileSize。默认文件散列算法是 SHA1。您可以通过以下方法进行更改
let downloadManager = JHDownloadManager.sharedInstance
downloadManager.fileHashAlgorithm = FileHashAlgorithm.MD5
  • 如果对下载文件的最终验证失败,文件将被排入队列以重新下载。
import JHDownloadManager

let downloadManager = JHDownloadManager.sharedInstance
downloadManager.downloadBatch([
[
"url": "http://87.76.16.10/test10.zip",
"destination": "test/test10.zip",
"fileSize": 11536384,
"checksum": "5e8bbbb38d137432ce0c8029da83e52e635c7a4f",
"identifier": "Content-1001"
],
[
"url": "http://speedtest.dal01.softlayer.com/downloads/test100.zip",
"destination": "test/test100.zip",
"fileSize": 104874307,
"checksum": "592b849861f8d5d9d75bda5d739421d88e264900",
"identifier": "Content-1002"
]
])
  • 或者,您可以将一批添加到 downloadManager 实例中,然后稍后调用 startDownloadingCurrentBatch
downloadManager.addBatch([
...
])

...

downloadManager.startDownloadingCurrentBatch()
  • 您可以为初始已下载的字节数设置值,这将有助于计算总体进度如果中途已下载一些文件
let downloadManager = JHDownloadManager.sharedInstance
downloadManager.setInitialDownloadedBytes(1024)
  • 您可以设置总字节数以帮助计算总体进度。此总字节数将覆盖每个下载要接收的实际总字节数的计算。
let downloadManager = JHDownloadManager.sharedInstance
downloadManager.setTotalBytes(1048576)
  • 默认情况下,用于验证下载文件的校验和算法是 SHA1。您可以通过以下方法进行更改
let downloadManager = JHDownloadManager.sharedInstance
downloadManager = FileHashAlgorithm.MD5;
// downloadManager.fileHashAlgorithm = FileHashAlgorithm.SHA512;
// downloadManager.fileHashAlgorithm = FileHashAlgorithm.SHA1; // default

JHDownloadManagerUIDelegate

JHDownloadManagerUIDelegate 可用于更新批量下载的进度和整批的完成状态

// let downloadManager = JHDownloadManager.sharedInstance
// downloadManager.uiDelegate = self;
// ...
func didReachProgress(progress:Float) {
// this method runs on main thread
// ... update progress bar or progress text here
}

func didFinishAll() {
// this method runs on main thread
// ... update completed status of the whole batch
}

func didFinishOnDownloadTaskUI(task:JHDownloadTask) {
// this method runs on main thread
// ... update completed status of a download task
}

func didReachIndividualProgress(progress:Float, task:JHDownloadTask) {
// this method runs on main thread
// ... update progress of a task
}

JHDownloadManagerDataDelegate

JHDownloadManagerDataDelegate 可用于下载完成后处理文件

// let downloadManager = JHDownloadManager.sharedInstance
// downloadManager.dataDelegate = self
// ...
func didFinishDownloadObject(task: JHDownloadTask) {
// this method runs on background thread
}

func didFinishAllForDataDelegate() {
// this method is run on background thread
// do whatever needs to be done after a batch has been downloaded successfully
}

JHDownloadTask

didFinishDownloadObject 方法中,您将接收到一个 JHDownloadTask 实例。在这个实例中,您可以检索以下属性

let url:NSURL = task.url
let urlString:String = task.urlString
let destination:String = task.destination // destination is the full path to the downloaded file
let fileName:String = task.fileName
let checksum:String = task.checksum
let identifier:String = task.identifier

其他功能

  • 您可以将下载任务添加到当前批处理中
let downloadManager = JHDownloadManager.sharedInstance
downloadManager.addDownloadTask(["url": "http://download.thinkbroadband.com/5MB.zip", "destination": "test/5MB.zip"])
  • 您可以获取当前正在下载的任务列表
let downloadManager = JHDownloadManager.sharedInstance
let currentDownloadTask = downloadManager.downloadingTasks()
  • 获取下载速率和剩余时间
let downloadRateAndRemaining = JHDownloadManager.sharedInstance.downloadRateAndRemainingTime()
let downloadRate:String = downloadRateAndRemaining[0];
let remainingTime:String = downloadRateAndRemaining[1];
  • 检查下载管理器是否正在下载
let isDownloading = JHDownloadManager.sharedInstance.isDownloading()

运行示例

git clone [email protected]:jameshuynh/JHDownloadManager.git
  • 双击 JHDownloadManager/Example/JHDownloadManager.xcworkspace
  • Cmd + R 运行示例项目 :)

Running Example

贡献

欢迎贡献、建议和问题 :) 同时,请克隆项目并发起您的 pull request!

作者

James Huynh,[email protected]

许可证

JHDownloadManager 以 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。