5

场景

作为用户,我可以拍摄(无限量)存储在应用程序文档文件夹中的照片和视频。这些媒体文件中的每一个都在 Sqlite 数据库中获得一条记录,其中包含附加信息(例如标题)。所有这些都可以完全离线完成。

回到网上,我会看到一个对话框,其中包含我拍摄的所有视频和照片的列表以及一个启动上传过程的按钮。

通过向服务器发出多部分 POST 请求,每个文件连同其元数据一起上传。服务器的响应与元数据一起存储在 Sqlite 数据库中(因此不会发生火灾和遗忘)。

可靠的解决方案?

如果我正确阅读并理解了此图表,最简单的解决方案是将这些上传中的每一个包装在一个任务中。副作用:10 分钟后,每个任务都会被取消,这会因连接速度慢或文件非常大(例如非常长的视频)而成为问题。

推荐的方法是使用 NSUrlSession/Background 传输服务。

这引出了我的问题:

是否可以在 NSURLSessionDataTasks 中包装多部分 POST,这是否可靠,即使任务运行时间超过 10 分钟或用户正在暂停应用程序?

由于我是 Xamarin/C# 人,我非常感谢一些用于工作分段上传的示例片段,即使它是在 Objective-C 中的 ;-)。

4

1 回答 1

3

几乎和...是的。

后台传输服务NSUrlSessionDownloadTask适用于s 和NSUrlSessionUploadTasks 。不是s,如此所述。NSUrlSessionDataTask

除了这个“基本”限制之外,在上传任务中使用后台传输服务是安全的。

后台 10 分钟免费通行证不再适用于 iOS 7(基本上,它在那里,但不同),但是,NSURLSession您不需要它的后台传输服务。

我在这里有一篇关于后台传输服务的博客文章,基于下载任务。

需要注意的重要一点是,开始一项任务基本上意味着它实际上会在某个时间开始实际上在其他时间完成。这取决于设备是使用蜂窝网络还是 Wi-Fi 以及(可能)只有 iOS(和 Apple)才知道的其他因素。

于 2013-10-31T17:42:29.160 回答