使用后台传输从图库上传资产的最佳方法是什么?
似乎uploadTaskWithRequest:fromData:
不适用于NSURLSession
created with,backgroundSessionConfiguration
因为它会导致异常:“由于未捕获的异常 'NSGenericException' 而终止应用程序,原因:'在后台会话中上传任务必须来自文件”。从异常描述来看,后台传输也不应该与流式上传任务一起使用。
很公平。uploadTaskWithRequest:fromFile:
当您考虑上传磁盘上已有的数据时,首先想到的是。但是 NSURLSession 类参考告诉我们这个方法只适用于文件 url,但是当你获得资产的 url 路径时,它从“assets-library://asset/...”开始并且提供这个路径也不起作用。
因此,似乎剩下的唯一选择是将文件从资产库复制到临时目录中,并将其文件 url 提供给uploadTaskWithRequest:fromFile:
. 但这没有任何意义,因为您已经在磁盘上保存了资产文件。我错过了什么吗?
更新:
在 Tech Talks 活动中与 Apple 工程师交谈,他确认后台 NSURLSession 仅支持文件 url。所以确实,您需要将资产库复制到一个临时目录中,并提供其文件 url 以uploadTaskWithRequest:fromFile:
使用后台 NSURLSession 上传它。不过,这种行为将来可能会改变。