2013-11-14 81 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