0
所以我有一些代碼,我一直在使用在我的應用程序上傳文件,沿此線:上傳通過URLSession大文件
var mutableURLRequest = URLRequest(url: url)
var uploadData = try! Data(contentsOf: dataUrl)
session.uploadTask(with: mutableURLRequest, from: uploadData).resume()
還有多一點給它比,但這些都是相關部分。不過,我注意到一些大的視頻文件Data(contentsOf: dataUrl)
失敗,因爲該文件是大到加載到內存中。我想重組這個,這樣我就可以一條一條地傳輸到服務器,而無需將整個文件加載到內存中。
我已經從我的服務器中弄清楚了這一點,我唯一沒有想到的是如何從URL中的數據中獲取chunkSize
片段,而無需將其放入數據對象中。我基本上是想這個結構:
let chunkSize = 1024 * 1024
let offset = 0
let chunk = //get data from dataUrl of size chunkSize offset by offset
//Upload each chunk and increment offset
NSInputStream
似乎能夠做到這一點前途,但我沒能找出最小程度,以拉字節從磁盤上的文件以這種方式成立。我可以在上面用什麼代碼填寫let chunk =
這一行來完成這樣的任務?
你試過'uploadTask(with:fromFile:)'?從文件中流式傳輸可能足夠聰明,而不是將所有內容加載到「數據」中。或者可以使用'uploadTask(withStreamedRequest :)'。 – rmaddy
我猜這不適用於我,因爲我需要用其他一些HTTP垃圾來裝飾每個塊,所以我的服務器知道發生了什麼。然而,不管它在封面下用來做什麼都可能是我需要的。 –