使用 NSURLSession downloadTaskWithResumeData: 时如何更改 URL?

Posted

技术标签:

【中文标题】使用 NSURLSession downloadTaskWithResumeData: 时如何更改 URL?【英文标题】:How to change the URL when using NSURLSession downloadTaskWithResumeData:? 【发布时间】:2015-09-16 05:48:16 【问题描述】:

我使用NSURLSession downloadTaskWithURL: 下载文件,并使用NSURLSessionDownloadTask cancelByProducingResumeData: 生成NSData 并将其保存到本地临时文件。

那我想用NSURLSessiondownloadTaskWithResumeData:继续下载任务。

有一个问题,我用来下载文件的 URL 是一个临时 url,我需要请求一个新的 URL 来下载相同的文件。 使用 downloadTaskWithResumeData: 后,它可以帮助我创建一个与以前相同的 URL 的 NSURLSessionDownloadTask

如何将 URL 替换为我新请求的新 URL? 或者我怎样才能改变这个NSURLSessionDownloadTask的HTTP请求?

您如何处理使用不同 URL 恢复 NSURLSessionDownloadTask 的情况?

我正在考虑获取NSURLSession 下载的 .tmp 文件,并在 HTTP Header 中设置 Range,然后使用新的临时 URL 写入此文件。

【问题讨论】:

【参考方案1】:

如果资源的路径被修改,我不相信我们可以恢复下载。

根据 Apple Developer Class Reference:

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

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

任务是 HTTP 或 HTTPS GET 请求

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

服务器支持字节范围请求

临时文件未因磁盘空间压力而被系统删除

正如我们所见,我们无法在恢复下载时以编程方式修改 URL。我们只能选择提供部分下载的数据。

【讨论】:

以上是关于使用 NSURLSession downloadTaskWithResumeData: 时如何更改 URL?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之网络编程--1NSURLSession的基本使用

iOS开发之网络编程--1NSURLSession的基本使用

iOS开发系列-NSURLSession

尝试使用 NSURLSession 加载网页

NSURLSession学习

NSURLSession的基本使用