iOS, jak przesłać duży plik zasobów do serwera poprzez przesyłanie strumieniowe
Jestem nowym programistą iOS.
Chcę przesłać duży plik (wideo lub obraz) zbiblioteka zasobów do sever, Mój oryginalny sposób to po prostu użycieNSMutableURLRequest i dołączNSData(duży film lub duży obraz) i nastąpił awaria w następującym kodzie:
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset){
//.......some code I just skip it...
ALAssetRepresentation *rep = [asset defaultRepresentation];
void *buffer = [rawData mutableBytes];
[rep getBytes:buffer fromOffset:0 length:size error:nil];
NSData *videoData = [[NSData alloc] initWithBytes:buffer length:size];//crash here
[self startUploading:videoData];
}
Wiem, że ta awaria jest spowodowana tym, że pamięć nie wystarcza, plik wideo nie może po prostu przydzielić do NSData.
Mam to na Google przez 2 dni i brzmi, że istnieje kilka sposobów rozwiązania tego problemu.
i chcę użyć sposobu przesyłania strumieniowego (punkt 2) do przesyłania materiałów,
Znalazłem ten link:http://zh.scribd.com/doc/51504708/10/Upload-Files-Over-HTTP
Wygląda na to, że może rozwiązać mój problem, ale wciąż nie jest jasne, jak to zrobić
Pytanie 1: istnieje przykład w tym linku, plik do przesyłania jest z pakietu
jak sprawić, by aktywa stały się strumieniem? lub skopiować zasób do folderu aplikacji?
Znalazłem ten linkSkopiuj obraz z biblioteki zasobów do folderu aplikacji
ale wciąż nie mogę znaleźć drogi.
Pytanie 2: lub Czy istnieje inny, bardziej przejrzysty przykład przesyłania strumieniowego dużego pliku?
Dziękuję za twoją pasję
updated1: po zaimplementowaniu delegatu needNewBodyStream komunikat „wyczerpanie strumienia żądania” wydawał się rozwiązany, ale zamiast tego spotkałam się z inną „domeną błędów = kCFErrorDomainCFNetwork Code = 303” Operacja nie mogła zostać zakończona.
-(NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request
{
[NSThread sleepForTimeInterval:2];
NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:pathToBodyFile];
if (fileStream == nil) {
NSLog(@"NSURLConnection was asked to retransmit a new body stream for a request. returning nil!");
}
return fileStream;
}