七,使用Alamofire进行文件下载
1,自定义下载文件的保存目录
下面代码将logo图片下载下来保存到用户文档目录下(Documnets目录),文件名不变。
Alamofire.download(.GET, "http://www.hangge.com/blog/images/logo.png") {
temporaryURL, response in
let fileManager = NSFileManager.defaultManager()
let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory,
inDomains: .UserDomainMask)[0]
let pathComponent = response.suggestedFilename
return directoryURL.URLByAppendingPathComponent(pathComponent!)
}
2,使用默认提供的下载路径
Alamofire内置的许多常用的下载路径方便我们使用,简化代码。比如,下载到用户文档目录下可以改成:
let destination = Alamofire.Request.suggestedDownloadDestination(
directory: .DocumentDirectory, domain: .UserDomainMask)
Alamofire.download(.GET, "http://www.hangge.com/blog/images/logo.png",
destination: destination)
3,下载进度
下面代码在文件下载过程中会不断地打印下载进度,同时下载完成后也会打印完成信息。
let destination = Alamofire.Request.suggestedDownloadDestination(
directory: .DocumentDirectory, domain: .UserDomainMask)
Alamofire.download(.GET, "http://www.hangge.com/favicon.ico", destination: destination)
.progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
let percent = totalBytesRead*100/totalBytesExpectedToRead
print("已下载:(totalBytesRead) 当前进度:(percent)%")
}
.response { (request, response, _, error) in
print(response)
}
4,断点续传(Resume Data)
当下载过程中被意外停止时,可以在响应方法中把已下载的部分保存起来,下次再从断点继续下载。
下面通过样例演示如何断点续传:
(1)程序启动后自动开始下载文件
(2)点击“停止下载”,终止下载并把已下载的数据保存起来,进度条停止走动。
(3)点击“继续下载”,从上次终止的地方继续下载,进度条继续走动。
原文:Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传) 原文:Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
import UIKit
import Alamofire
class ViewController: UIViewController {
//停止下载按钮
@IBOutlet weak var stopBtn: UIButton!
//继续下载按钮
@IBOutlet weak var continueBtn: UIButton!
//下载进度条
@IBOutlet weak var progress: UIProgressView!
//下载文件的保存路径
let destination = Alamofire.Request.suggestedDownloadDestination(
directory: .DocumentDirectory, domain: .UserDomainMask)
//用于停止下载时,保存已下载的部分
var cancelledData: NSData?
//下载请求对象
var downloadRequest: Request!
override func viewDidLoad() {
super.viewDidLoad()
//页面加载完毕就自动开始下载
self.downloadRequest = Alamofire.download(.GET,
"http://dldir1.qq.com/qqfile/qq/QQ7.9/16621/QQ7.9.exe",
destination: destination)
self.downloadRequest.progress(downloadProgress) //下载进度
self.downloadRequest.response(completionHandler: downloadResponse) //下载停止响应
}
//下载过程中改变进度条
func downloadProgress(bytesRead: Int64, totalBytesRead: Int64,
totalBytesExpectedToRead: Int64) {
let percent = Float(totalBytesRead)/Float(totalBytesExpectedToRead)
//进度条更新
dispatch_async(dispatch_get_main_queue(), {
self.progress.setProgress(percent,animated:true)
})
print("当前进度:(percent*100)%")
}
//下载停止响应(不管成功或者失败)
func downloadResponse(request: NSURLRequest?, response: NSHTTPURLResponse?,
data: NSData?, error:NSError?) {
if let error = error {
if error.code == NSURLErrorCancelled {
self.cancelledData = data //意外终止的话,把已下载的数据储存起来
} else {
print("Failed to download file: (response) (error)")
}
} else {
print("Successfully downloaded file: (response)")
}
}
//停止按钮点击
@IBAction func stopBtnClick(sender: AnyObject) {
self.downloadRequest?.cancel()
self.stopBtn.enabled = false
self.continueBtn.enabled = true
}
//继续按钮点击
@IBAction func continueBtnClick(sender: AnyObject) {
if let cancelledData = self.cancelledData {
self.downloadRequest = Alamofire.download(resumeData: cancelledData,
destination: destination)
self.downloadRequest.progress(downloadProgress) //下载进度
self.downloadRequest.response(completionHandler: downloadResponse) //下载停止响应
self.stopBtn.enabled = true
self.continueBtn.enabled = false
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
荒野乱斗国际版 (BrawlStars)最新版本v56.274
下载一波超人内置修改器菜单版 安卓版v1.0.2
下载敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载继承了一座戏园子无限声望铜钱版 内置菜单最新版v1.7
继承了一座戏园子折相思版是游戏的破解版本,在该版本中为玩家提
山河半世橙光清软金手指版 无限鲜花v3.24
山河半世是一款超级好玩的橙光恋爱游戏,在游戏中玩家们需要扮演
蓬莱手游折相思版 安卓版v1.0.0
蓬莱免广告版是游戏的修改版本,在该版本中为玩家去除了广告,玩
当红影后橙光游戏破解版2025 最新版v1.0
当红影后橙光破解版是一款超级好玩的娱乐圈题材的橙光游戏,在这
忽然成了万人迷清软完结版 无限鲜花版v12.15
忽然成了万人迷破解版是一款非常好玩的男性向橙光游戏,在有一天