Rya*_*rke 13 file-upload multipart ios ios7 nsurlsession
我目前正在设计一个系统,用于从应用程序将多个图像上传到服务器.这些文件将存储在本地设备上,当前的想法是将它们分成块,然后将它们逐块上传到服务器,在上传下一个之前等待成功消息.
这个过程对于用户来说应该是无缝的,他们应该按下按钮来提交所有图像,然后能够关闭应用程序并使其在后台继续.在iOS 7中,我看到您可以将上传内容传递给新的NSURLSession API,并让它独立于您的应用程序处理上传任务.
我想知道是否有人知道这种转移是多么可靠.如果我将整个图像传递给它,如果互联网连接中途下降会发生什么?后台传输服务是否会在以后重试?我们的想法是,我们可以上传一个图像,如果它在一半时间内失败,那么我们可以在以后重新开始连接时从那一点继续.
我们的一个想法是将文件拆分为块,然后将所有块作为单独的NSURLSessionUploadTasks传递,并假设它们最终都将被发送到服务器.
另一个是发送第一个块使用:
uploadTaskWithRequest:fromData:completionHandler:
Run Code Online (Sandbox Code Playgroud)
然后在completitionHandler中发送下一个块.我的问题是,如果在后台,下一个块将拥有它
@property BOOL discretionary = true
Run Code Online (Sandbox Code Playgroud)
这意味着它只会在插入时通过WiFi发送.我需要这可以在所有网络上工作并能够应对中断.
我不想要任何代码,只是建议这是否是实现这一目标的正确方法.
我会尝试回答你的一些问题
如果您的上传因错误而中途停止,您的应用应该在后台启动,您应该能够执行所需的错误处理.在您的情况下,如果您的服务器支持可恢复的上传,您应该能够获得偏移量,然后设置另一个任务来上传下一个块.
如果您使用配置为在后台运行的NSURLSession,则无法使用完成处理程序设置上载任务,并且无法使用NSData对象上载块.您唯一的选择是将块写入磁盘然后使用
uploadTaskWithRequest:fromFile:
Run Code Online (Sandbox Code Playgroud)
我认为这是有道理的,因为NSData对象驻留在应用程序内存中,后台上载由外部守护程序执行,因此只能上传文件(来自用户的沙箱).此外,您不需要使用完成处理程序,而是需要使用委托来监听回调(当应用程序位于前台时).
如果您仍然喜欢使用NSData对象,那么另一种解决方案是使用创建任务
downloadTaskWithRequest:
Run Code Online (Sandbox Code Playgroud)
这样,您可以在请求正文中设置NSData对象,并在请求中传递它.您将需要使用NSURLMutableRequest设置您的请求来实现此目的.
对于自由裁量的财产,由于它默认为TRUE,我不确定我们是否可以做很多事情.它表示传输更有可能发生在Wi-Fi上并且在插入时因此可能在蜂窝电话上发生的可能性很小,但我不会接受我的话,我只是在猜测.
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |