使用 NSURLSession UploadTask 暂停、恢复、取消上传任务

Posted

技术标签:

【中文标题】使用 NSURLSession UploadTask 暂停、恢复、取消上传任务【英文标题】:Pause,Resume,Cancel Upload Task Using NSURLSession UploadTask 【发布时间】:2015-01-07 06:40:13 【问题描述】:

我正在开发一个使用 NSURLSession 上传多个文件的应用程序,现在我的文件已成功上传。但现在我想要实现的是暂停、恢复和取消上传,就像我们在下载任务中所做的那样。是否可以。?任何帮助,将不胜感激。谢谢

【问题讨论】:

在使用 nsurlsession 时不能暂停然后恢复上传任务 好的。但是在这种情况下,当设备在上传时离线并且当它恢复在线时会怎样? @安德烈 从头开始 在 URLSession 中是否有任何替代方法可以做到这一点。因为我必须实现这一点,因为这是我的项目的要求。请帮忙 您是否将文件上传到某种服务或您自己的服务器?根据您的答案,可能会有一些变体,但并不多。无论如何,我认为您必须放弃使用 NSURLSession 进行上传 【参考方案1】:

我研究了很多,但一无所获。在我假设这是一个下载任务在我的代码上尝试了这个之后,我开始知道我们可以使用 NSURLSession 来“暂停,恢复”上传任务,就像我们在下载任务中所做的那样.

要暂停任务,只需调用[yourUploadTask suspend]; 继续[yourUploadTask resume]; 取消[yourUploadTask cancel];

它可能对使用 NSURLSession 处理 uploadTask 的人有所帮助。

【讨论】:

【参考方案2】:

可以尝试使用继承自URLSessionTask的suspend()、resume()方法,但是resume()会导致上传失败。您可以通过自动重试上传错误(即除 400 秒以外的任何非永久性错误)在上传类中解决此问题,但这意味着从头开始重新启动每个待处理的上传并丢失已上传的数据。

URLSessionUploadTask 没有取消(byProducingResumeData completionHandler: @escaping (Data?) -> Void) 和 URLSessionDownloadTask 一样,因此没有保存状态数据来恢复和继续上传。实现一个需要我们自己滚动,我还没有做过,但我认为需要特定的服务器支持才能实现,并且需要较低级别网络 API 的用户。

【讨论】:

以上是关于使用 NSURLSession UploadTask 暂停、恢复、取消上传任务的主要内容,如果未能解决你的问题,请参考以下文章

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

iOS开发系列-NSURLSession

尝试使用 NSURLSession 加载网页

NSURLSession学习

NSURLSession的基本使用

NSURLSession的简单使用