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?
Czy na pewno nie jest to coś prostego, jak timeoutIntervalForResource jest o wiele za nisko? –
Nie jestem pewien, czy to nadal jest przydatne, ale zmieniono wartość timeIntervalForResource i forRequest na ogromną wartość i nadal ten sam problem. –
Dwa lata po zadaniu pytania, była to wielka przerwa! –