【发布时间】:2017-09-17 21:51:15
【问题描述】:
我有一个 API 可以生成签名的下载链接,该链接会在短时间内过期。我想添加恢复下载的功能,但如果资产的 URL 发生变化,URLSession API 不提供恢复下载的本机功能。
我解决这个问题的尝试是跟踪暂停时下载的字节,存储下载的数据 blob,获取新的签名下载 url,使用 Range 标头继续下载,然后将所有数据 blob 连接在一起下载完成。
这是用于开始下载的代码:
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)
let task = session.downloadTask(with: signedURL)
self.sessionDownloadRequest = task
我面临的问题是 resume data var 似乎并未实际包含下载的数据。
self.sessionDownloadRequest.cancel(byProducingResumeData: { (data) in
print(data.count) //This surprisingly always returns the same count
}
无论我在暂停前让下载继续多长时间,该数据块的大小似乎始终相同。我在哪里/如何访问已下载的数据块?
谢谢!
【问题讨论】:
-
你没有展示任何相关代码,所以谁知道你在做什么,对还是错?
-
@matt,我添加了初始请求代码。澄清一下,我在获取新的签名 URL、恢复特定范围的下载或数据 blob 的连接时没有遇到问题,因此我没有包含这些代码以保持问题的简洁。如果您还有什么想看的,请告诉我。