介紹的iOS - 上傳流大文件(應用程序崩潰分配使用NSData的文件過大時)
目前我正在做一些錯誤修復中的應用是在Vimeo的風格,那就是,用戶可以從手機或iPad錄製視頻,然後上傳視頻供其他用戶查看。目前的問題與上傳大文件有關,因爲我們現在正在處理上傳的方式。
的問題
所以問題在本質上是將文件上傳到服務器的時候,我們第一次分配所有具有在的NSData對象要上傳的字節數。然後這串字節將被附加到一個標準的HTTP Post消息,然後一個接收API將會處理它。 問題在於,對於大文件大小(哪些視頻會很快),應用程序會因爲NSData對象在iDevice上佔用太多內存而崩潰。
這是這個過程是如何工作的:
Byte *buffer = malloc(content.defaultRepresentation.size);
NSUInteger buffered = [content.defaultRepresentation getBytes:buffer fromOffset:0.0 length:content.defaultRepresentation.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered];
NSData *movieData = [NSData dataWithData:data];
我只是從已保存在iPhone或iPad的標準相機膠捲的視頻獲得的字節數。然後我把這些字節放到一個NSData對象中。然後,這個NSData對象的字節串將被簡單地附加到一個簡單的HTTP post消息併發送到一個API。
問題
接下來的問題是,我看到的問題,是整個字節串都在一個單一的HTTP POST消息被髮送。那麼有沒有什麼方法可以在電影文件中加載大塊文件並將其附加到郵件中,因此您一次不會佔用太多內存?或者你怎麼去做這件事?
謝謝你的時間:)
啊,是的,我看了圍繞在網站上,並得到它安裝和編譯:)現在我唯一的問題是ASIHTTPRequest庫接受文件的字符串URL(當你想附加到POST請求),但我還沒有成功地能夠當它通過ALAsset類時,通過它的URL成功地指向數據(因爲該文件位於相機膠捲中的應用程序之外)。是否有可能訪問應用程序沙箱之外的文件路徑?有什麼辦法可以解決這個問題嗎?例如,作爲一個簡單的例子 – CodingBeagle 2012-04-10 13:35:16
這產生一個長度爲0字節的NS數據對象:NSData * testData = [NSData dataWithContentsOfURL:theContent.defaultRepresentation.url]; – CodingBeagle 2012-04-10 13:36:54