5

Próbuję przesłać duży plik 2 GB w tle przy użyciu NSURLSessionUploadTask. Usługa korzysta z formatu wieloczęściowego, więc aby przesłać go w tle, utworzę tymczasowy plik z treścią żądania, a następnie używam parametru uploadTask, aby zaplanować przesyłanie, a po zakończeniu przesyłania plików usuwam plik tymczasowy .Tło NSURLSession przesyłające ogromne pliki

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

Z plików mniejszych następnie 1,4 GB upload działało ok, ale gdy próbuję przesłać pliki wideo z 2 GB, wysyłanie zakończy się niepowodzeniem. Serwer zwraca komunikat o błędzie, który nie został dołączony do pliku.

Reorganizuję komponent wysyłania z ASIHTTP na NSURLSession, jeśli przesyłam go z ASIHTTP, działa nawet w przypadku dużych plików.

ten sposób tworzę 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]; 

Tak więc problem jest tylko dla dużych plików, na małych plików upload jest wykonywana. Czy ktoś inny napotkał ten sam problem?

+0

Czy na pewno nie jest to coś prostego, jak timeoutIntervalForResource jest o wiele za nisko? –

+0

Nie jestem pewien, czy to nadal jest przydatne, ale zmieniono wartość timeIntervalForResource i forRequest na ogromną wartość i nadal ten sam problem. –

+1

Dwa lata po zadaniu pytania, była to wielka przerwa! –

Odpowiedz

0

Zgodnie z opisem dewelopera Apple dla obiektu discretionary , jeśli plik jest tak duży, system może oczekiwać na dobry moment, taki jak połączenie WIFI.

Przełącz właściwość uznaniową na NIE i spróbuj ponownie. powodzenia!

self.configuration.discretionary = NIE;

+0

Może nie odpowiada na pytanie, musisz być pewien, i podać fakty, które wspierają odpowiedź –

+0

przepraszam! jest to zrozumiałe ... to moja pierwsza odpowiedź. – vibroto

+0

To jest stare pytanie, obecnie nie jest istotne, może to był błąd iOS SDK lub błąd serwera, który wie. –