iOS, wie Sie eine große Asset-Datei per Streaming in den Server hochladen
Ich bin ein neuer iOS-Programmierer.
Ich möchte eine große Datei (Video oder Bild) von hochladenAsset-Bibliothek Mein ursprünglicher Weg ist einfach zu benutzenNSMutableURLRequest und anhängenNSData(großes Video oder großes Bild), und Absturz ist in folgendem Code passiert:
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];
}
Ich weiß, dass dieser Absturz darauf zurückzuführen ist, dass der Speicher nicht ausreicht und die Videodatei nicht einfach NSData zugewiesen werden kann.
Ich habe dies 2 Tage lang googelt und es gibt verschiedene Möglichkeiten, dies zu lösen.
und ich möchte Streaming Way (Punkt 2) verwenden, um Sachen hochzuladen,
Ich habe diesen Link gefunden:http://zh.scribd.com/doc/51504708/10/Upload-Files-Over-HTTP
Schauen Sie wie kann mein Problem lösen, aber immer noch nicht sehr klar zu wissen, wie zu tun ist
Frage 1: In diesem Link gibt es ein Beispiel. Die Upload-Datei stammt aus dem Bundle
Wie wird ein Asset in einen Stream umgewandelt? oder Asset in den APP-Ordner kopieren?
Ich habe diesen Link gefundenKopieren Sie das Bild aus der Assets-Bibliothek in einen App-Ordner
kann aber immer noch nicht den Weg finden.
Frage 2: oder Gibt es ein anderes übersichtliches Streaming-Beispiel für das Hochladen großer Dateien?
Vielen Dank für Ihre Leidenschaft
updated1: Nachdem ich needNewBodyStream-Delegaten implementiert hatte, schien die Meldung "Request Stream Erschöpfung" behoben zu sein. Stattdessen wurde eine andere Fehlermeldung "Error Domain = kCFErrorDomainCFNetwork Code = 303" angezeigt. Der Vorgang konnte nicht abgeschlossen werden. "
-(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;
}