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

10

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


使用NSURLSession时,无法暂停然后恢复上传任务。 - Andrey Chernukha
好的。但是如果设备在上传时离线了,当它重新联机时会怎样?@Andrey - Tabish Sohail
从头开始重新开始。 - Andrey Chernukha
有没有其他在URLSession中实现的方法?因为我必须按照项目要求完成这个任务。请帮忙。 - Tabish Sohail
你是将文件上传到某种服务还是自己的服务器?根据你的回答可能会有一些变体,但不多。无论如何,我认为你必须放弃使用NSURLSession进行上传。 - Andrey Chernukha
你能解释一下为什么你觉得暂停/恢复上传任务不可能吗?上传任务响应基类上的暂停/恢复方法。只是想知道是否存在某些边缘情况,你是否知道这些情况在文档中并不明显。@AndreyChernukha - Alfie Hanssen
2个回答

8
我学习了很多,但仍然找不到答案。后来我尝试将它应用于我的代码,假设这是一个下载任务,我发现我们可以像下载任务一样使用NSURLSession“暂停,恢复”上传任务。
要暂停任务,只需调用[yourUploadTask suspend];,要恢复任务,只需调用[yourUploadTask resume];,要取消任务,只需调用[yourUploadTask cancel]; 这可能会对使用NSURLSession上传任务的人有所帮助。

0

您可以尝试使用继承自URLSessionTask的suspend()和resume()方法,但是resume()会导致上传失败。您可以在上传类中通过自动重试上传错误(即除了400之外的任何非永久性错误)来解决这个问题,但这意味着必须重新开始每个挂起的上传,并且会丢失已经上传的数据。

与URLSessionDownloadTask不同,URLSessionUploadTask没有cancel(byProducingResumeData completionHandler: @escaping (Data?) -> Void)方法,因此没有保存状态数据以恢复和继续上传。要实现这个方法需要自己编写代码,我还没有做过,但我相信需要特定的服务器支持来实现,并且需要使用较低级别的网络API。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接