5

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

似乎uploadTaskWithRequest:fromData:不适用于NSURLSessioncreated with,backgroundSessionConfiguration因为它会导致异常:“由于未捕获的异常 'NSGenericException' 而终止应用程序,原因:'在后台会话中上传任务必须来自文件”。从异常描述来看,后台传输也不应该与流式上传任务一起使用。

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

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

更新:

在 Tech Talks 活动中与 Apple 工程师交谈,他确认后台 NSURLSession 仅支持文件 url。所以确实,您需要将资产库复制到一个临时目录中,并提供其文件 url 以uploadTaskWithRequest:fromFile:使用后台 NSURLSession 上传它。不过,这种行为将来可能会改变。

4

1 回答 1

2

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

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

于 2013-11-18T13:04:54.037 回答