【问题标题】:How to check resume capability of current URLSessionDownloadTask?如何检查当前 URLSessionDownloadTask 的恢复能力?
【发布时间】:2017-09-20 08:02:58
【问题描述】:

目前我正在从服务器下载文件,效果很好。


我的问题是,在实际下载开始之前,我怎么知道 url 是否恢复 capability
下面是一些代码 sn-p,
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
        }
    }
}

请在这种情况下指导我。 提前致谢

【问题讨论】:

  • 简历容量是什么意思?您是指下载中断后恢复的能力吗?
  • @user1046037,是的,我已经编辑了这部分问题。你能举个例子吗?
  • 所有URLSessionTasks 都可以暂停和恢复。只需调用函数suspend / resume。自己试试,我自己没试过。据我所知,它与特定 URL 无关

标签: ios swift xcode8 nsurlsession nsurlsessiondownloadtask


【解决方案1】:

只有满足以下条件才能恢复下载:

  • 该资源自您第一次请求以来没有更改

  • 任务是 HTTP 或 HTTPS GET 请求

  • 服务器在其响应中提供 ETag 或 Last-Modified 标头(或两者)

  • 服务器支持字节范围请求

  • 临时文件没有被系统响应磁盘空间压力删除

→ 来源:https://developer.apple.com/documentation/foundation/urlsessiondownloadtask/1411634-cancel

【讨论】:

    【解决方案2】:

    如果您在 HttpHeaders 中发送带有 Range 的请求并收到 206 状态码作为响应,则您可以继续下载。否则无法继续下载。

    阅读更多关于它here

    【讨论】:

    • 您好,感谢您的即时回复,我们会尽力为您提供结果。
    • 是的,我得到了状态码 206,但我的问题是在下载过程中获取此信息。有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2011-08-30
    相关资源
    最近更新 更多