2013-11-14 46 views
5

使用后台传输从图库上传资产的最佳方法是什么?NSURLSession:上传带有后台传输的资产

好像uploadTaskWithRequest:fromData:不与backgroundSessionConfiguration创建NSURLSession,因为它会导致异常的工作:“由于未捕获的异常‘NSGenericException’,原因终止应用程序:“上传背景会议的任务必须是从文件”。从异常情况描述来看,后台传输不应该适用于流式上传任务。

不够公平。当您考虑上传磁盘上已有的数据时,首先想到的是uploadTaskWithRequest:fromFile:。但NSURLSession类参考告诉我们,这种方法只适用于文件URL,但是当你得到资产的URL路径时,它从“assets-library:// asset/...”开始,并提供这个路径不起作用。

因此,似乎剩下的唯一选择是将资源库中的文件复制到临时目录中,并将其文件url提供给uploadTaskWithRequest:fromFile:。但它没有任何意义,因为您已将资产文件保存在磁盘上。 我错过了什么吗?

更新:

在技术讲座活动与苹果公司的工程师交谈,他证实背景NSURLSession仅支持文件URL。所以确实需要将资产库复制到临时目录中,并将其文件url提供给uploadTaskWithRequest:fromFile:以使用后台NSURLSession上传它。 虽然这种行为在未来可能会改变。

回答

2

他们还说文档中的某处 上传/下载url只支持文件http https方案。后台仅支持http/https。
我相信核心数据和资产库网址尽管是技术上有效的网址,但并不是真正的网址,并且很可能没有通过创建自定义NSurlprotocol-s来实现。

所以我倾向于认为你应该将资产写入某个文件并将URL传递给该文件来上传任务。 我正在开发一个上传资源的项目,我刚开始使用后台会话将其转换为nsursession。所以我会在今天晚些时候为自己尝试证明这个理论。

+0

嗯,是的。复制文件基本上是我现在正在做的。你在nsursession上的进展如何? –

+0

你的猜测似乎是正确的。 –

+0

@RobertGeifman所以基本上uploadTaskWithRequest:fromData:不起作用? – marciokoko