目前我正致力于从服务器上下载文件,这很有效。
class Downloader:NSObject,URLSessionDownloadDelegate {
/*
SOME PROPERTIES & DECLARATIONS
*/
override init() {
super.init()
let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: url.absoluteString)
backgroundSessionConfiguration.networkServiceType = .default
self.defaultSession = URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main)
}
func start(_ block:DownloaderCompletionHandler?) {
guard self.input == nil else { return }
guard self.output == nil else { return }
if let data = self.resumableData {
self.downloadTask = self.defaultSession.downloadTask(withResumeData: data)
}else {
let request = URLRequest(url: self.input!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 0.60)
self.downloadTask = self.defaultSession.downloadTask(with: request)
}
self.downloadTask.resume()
}
func pause() {
self.downloadTask.cancel { (data) in
self.resumableData = data
}
}
}
请告诉我这种情况。
感谢提前
答案 0 :(得分:0)
如果您在HttpHeaders中发送带Range的请求并收到206状态代码作为响应,则可以继续下载。否则下载无法恢复。
详细了解here
答案 1 :(得分:0)
只有满足以下条件,才能恢复下载:
自您首次请求以来,资源没有改变
任务是HTTP或HTTPS GET请求
服务器在其响应中提供ETag或Last-Modified标头(或两者)
服务器支持字节范围请求
系统尚未响应磁盘空间压力而删除了临时文件
→来源:https://developer.apple.com/documentation/foundation/urlsessiondownloadtask/1411634-cancel