使用后台转移从图库上传资源的最佳方法是什么?
似乎uploadTaskWithRequest:fromData:
不能与使用NSURLSession
创建的backgroundSessionConfiguration
一起使用,因为它会导致异常:“因未捕获的异常而终止应用程序'NSGenericException',原因:'上传任务后台会话必须来自文件“。从异常描述来看,后台传输也不适用于流式上传任务。
足够公平。当您考虑上传磁盘上已有的数据时,首先想到的是uploadTaskWithRequest:fromFile:
。但是NSURLSession类参考告诉我们这个方法只适用于文件URL,但是当你获得资产的url路径时,它从“assets-library:// asset / ...”开始,并且提供这个路径也不起作用。
所以似乎剩下的唯一选择是将资产库中的文件复制到临时目录中,并将其文件URL提供给uploadTaskWithRequest:fromFile:
。但它没有任何意义,因为您已经在磁盘上保存了资产文件。
我错过了什么吗?
更新
在Tech Talks活动中与Apple工程师交谈,他确认后台NSURLSession仅支持文件网址。实际上,您需要将资产库复制到临时目录中,并将其文件URL提供给uploadTaskWithRequest:fromFile:
以使用后台NSURLSession上载它。
但是,此行为可能在将来发生变化。
答案 0 :(得分:2)
他们还在文档中的某处说 上传/下载网址仅支持文件http https方案。后台仅支持http / https 我认为核心数据和资产库网址尽管技术上有效的网址并不是真正的网址,但很可能并非通过创建自定义NSurlprotocol-s来实现。
所以我倾向于认为您应该将资产写入某个文件并将URL传递给该文件以上传任务。 我正在开发一个上传资产的项目,我刚开始使用后台会话将其转换为nsursession。所以我今天晚些时候会为自己尝试一下来证明这个理论。