- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
场景:
作为用户,我可以拍摄(无限量)存储在应用程序文档文件夹中的照片和视频。这些媒体文件中的每一个都会在 Sqlite 数据库中获得一条记录,其中包含附加信息(例如标题)。所有这些都可以完全离线完成。
重新上线后,我会看到一个对话框,其中列出了我拍摄的所有视频和照片,以及一个用于启动上传过程的按钮。
通过向服务器发出多部分 POST 请求,每个文件连同其元数据一起上传。服务器的响应与元数据一起存储在 Sqlite 数据库中(因此不会发生即发即弃的情况)。
可靠的解决方案?
如果我正在阅读和理解this chart正确地说,最简单的解决方案是将这些上传中的每一个都包装在一个任务中。副作用:10 分钟后每个任务都会被取消,这会因连接速度慢或文件非常大(例如非常长的视频)而成为问题。
推荐的方法是使用 NSUrlSession/后台传输服务。
这引出了我的问题:
是否可以将多部分 POST 包装在 NSURLSessionDataTasks 中,这是否可靠,即使任务运行时间超过 10 分钟或用户正在暂停应用程序?
因为我是一名 Xamarin/C# 开发人员,所以我非常感谢一些示例片段用于有效的分段上传,即使它是在 Objective-C 中;-)。
最佳答案
几乎……是的。
后台传输服务与 NSUrlSessionDownloadTask
配合使用s 和 NSUrlSessionUploadTask
仅。不是NSUrlSessionDataTask
s,如所述here .
除此“基本”限制外,使用后台传输服务处理上传任务是安全的。
后台 10 分钟免费通行证不再适用于 iOS 7(基本上,它存在,但有所不同),但是,NSURLSession
和后台传输服务,您不需要它。
我有一篇博文 here用于后台传输服务,基于下载任务。
需要注意的重要一点是,开始一项任务基本上意味着它实际上将在某个时间开始并在其他时间实际结束。这取决于设备是使用蜂窝网络还是 Wi-Fi 以及其他(可能)只有 iOS(和 Apple)知道的因素。
关于iOS7 后台同步(使用 NSURLSessionDataTask?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710383/
我有一个使用 NSURLSessionDataTask 调用 API 的函数,您可以在此处查看它: - (void)getExplorerUrl:(void (^)(NSString *))measu
我正在尝试向服务器发出请求,该请求应该返回我可以在应用程序的其余部分中使用的数据。这是我的代码: func makeNewUser() -> NSDictionary { var full_u
我正在使用 AFNetworking 并且我正在覆盖 -dataTaskWithRequest:completionHandler: 以基本上 MITM 我的请求并在调用实际响应 block 之前进行
我使用 NSURLSessionDataTask 获取 JSON 提要,并填充位于共享存储(单例)内的 NSMutableArray。外部世界可以通过将其转换为 NSArray 的 getter 来访
我不知道如何同步 NSURLSessionDataTask。 如何在 syncInfo1Info2 中同步这两个 session : - (void) syncInfo1Info2 { //How
我想知道 NSURLSessionDataTask 在后台的行为。 NSURLSessionDataTask 是否会立即暂停(一旦应用程序进入后台)?还是 iOS 会给出一些时间(希望有 30 秒左右
我正在创建一个 NSMutableRequest: self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequ
当我开始使用 NSURLSessionDataTask 下载文件时,有一段时间进度不工作。然后在完成下载后只显示全蓝色的进度条。 我的代码 - (void)URLSession:(NSURLSess
我对 Objective C 和 iOS 开发总体来说是新手。我正在尝试创建一个应用程序,它会发出 http 请求并在标签上显示内容。 当我开始测试时,我注意到标签是空白的,尽管我的日志显示我已经恢复
我正在学习有关访问 API 和解析结果的教程。我正在逐字逐句地学习教程,但由于“预期返回‘NSURLSessionDataTask’的函数中缺少返回值”,我无法运行该程序 所以我将返回语句更改为“re
我要使用 NSURLSessionDataTask 执行请求链。当第一个请求完成时,我需要使用第一个请求中的 responseData 来执行另一个多重请求。最后,我得到 NSArray 并提供给 T
我正在尝试从将同时运行的多个 NSURLSessionDataTasks 中聚合数据。 __block NSMutableDictionary *languageDetails = [NSMutabl
我刚刚用 Swift 开发了一个库,用于将数据发布到特定服务器。我使用 NSURLSession.sharedSession().dataTaskWithRequest(request) 打开连接。现
我有一个 iOS 应用程序,它使用 NSOperationQueue、NSOperations 和 AFNetworking 2.1.0 来触发对服务器的请求。 -[NSOperation main]
我知道我可以使用 dataTaskWithURL:completionHandler: 获取 completionHandler block 中的数据,但这会阻止触发委托(delegate)方法,我需
场景: 作为用户,我可以拍摄(无限量)存储在应用程序文档文件夹中的照片和视频。这些媒体文件中的每一个都会在 Sqlite 数据库中获得一条记录,其中包含附加信息(例如标题)。所有这些都可以完全离线完成
在使用 NSURLSessionDataTask 向服务器发送 JSON 请求时,我遇到了一个非常奇怪的问题。 第一个请求通过并且我收到正确的 JSON 响应,当我执行第二个请求时,我总是得到旧的响应
我想确定来自 NSURLSessionDataTask 的响应是来自缓存,还是来自服务器 我正在从 创建我的 NSURLSessionDataTask request.cachePolicy = NS
我有一个注册 View Controller ,它处理所有用户输入并调用传递给它的另一个类 (wsClass) 中的函数,该数据作为 NSDictionary。 调用 wsClass 中的函数并建立连
我从 Web 获取 JSON 数据,对其进行解析,然后使用它在 map 上显示图钉。 这里是方法一,没有问题: NSString *CLIENT_ID = @"SECRET_ID"; NSSt
我是一名优秀的程序员,十分优秀!