5

我想上傳一個大文件2GB在後臺使用NSURLSessionUploadTask。該服務使用多部分格式,所以爲了上傳它在後臺我創建一個臨時文件與請求的身體,然後我使用uploadTask來安排上傳,當文件完成上傳我刪除臨時文件。NSURLSession背景上傳大文件

NSURLSessionUploadTask *uploadTask = [[self backgroundNSURLSession] uploadTaskWithRequest:uploadRequest fromFile:filePath]; [uploadTask resume];

對於較小的則1.4 GB上傳文件的工作確定,但是當我嘗試上傳2 GB的視頻文件,上傳失敗。服務器正在返回錯誤消息,我沒有附加該文件。

我正在將上傳組件從ASIHTTP重構爲NSURLSession,如果我使用ASIHTTP進行上載,即使對於大型文件也是如此。

這是我如何創建我的NSURLSession:

if ([NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) { 
     self.configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:appID]; 
    } else { 
     self.configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:appID]; 
    } 
    self.configuration.HTTPMaximumConnectionsPerHost = 1; 
    self.configuration.discretionary = YES; 
    self.configuration.timeoutIntervalForResource = 60*60; 
    self.configuration.timeoutIntervalForRequest = 60*60; 
    backgroundSession = [NSURLSession sessionWithConfiguration:self.configuration delegate:self delegateQueue:nil]; 

所以,問題是隻針對大文件,對於小文件進行上傳。有沒有其他人遇到同樣的問題?

+0

你確定它不是像timeoutIntervalForResource太簡單嗎? – 2015-06-22 12:18:58

+0

我不確定這是否仍然有用,但是,我將timeIntervalForResource和forRequest更改爲一個巨大的值並仍然是相同的問題。 – 2016-10-31 11:22:44

+1

你問這個問題後2年,那是一個很大的時間間隔! – 2016-10-31 14:43:04

回答

0

根據蘋果開發者對012財產discretionary 的描述,如果文件太大,系統可能會等待像WIFI連接那樣的好時機。

將任意屬性切換爲NO並重試。祝你好運!

self.configuration.discretionary = NO;

+0

也許不回答這個問題,您需要確定,並提供支持您的回答 – 2017-09-21 08:21:21

+0

的事實對不起!據瞭解......這是我的第一個回答 – vibroto 2017-09-21 08:33:35

+0

這是一個老問題,現在並不真正相關,也許這是一個iOS SDK錯誤或服務器錯誤,誰知道。 – 2017-09-21 13:11:27