2016-07-21 12 views
0

Ich versuche, einen iPod Musik auf FTP-Server hochzuladen. so AVAssetExportSession verwenden, mache ich eine Datei im Ordner Dokumentensoutputstream in Status 1 stecken (NSStreamStatusOpening = 1) - iOS - Ziel c


exportSession.outputURL = [NSURL fileURLWithPath:musicFilePath]; 
[exportSession exportAsynchronouslyWithCompletionHandler:^{ 
    if(exportSession.status == AVAssetExportSessionStatusCompleted) { 
     NSLog(@"export completed."); 
     self.exportedMusicPath = musicFilePath; 
     [self.delegate exportMusicFinish:self.exportedMusicPath]; 

    } 
    else { 
     NSLog(@"export failed."); 
     [self.delegate exportMusicFinish:@"export failed"]; 
    } 
}]; 

und ich öffne eine nsoutputstream für meinen FTP-Upload und Delegaten exportierte Dateipfad durch


-(void) exportMusicFinish:(NSString *)exportedMusicPath { 
    if(!self.fileUpload) { 
     self.fileUpload = [[FTPUpload alloc] init]; 
     self.fileUpload.delegate = self; 
    } 
    self.exporter = nil; 
    [self.fileUpload uploadFileToFTP:exportedMusicPath]; 
} 
erhalten
self.fileStream = [NSInputStream inputStreamWithFileAtPath:filePath]; 
assert(self.fileStream != nil); 

[self.fileStream open]; 

// Open a CFFTPStream for the URL.   
self.networkStream = CFBridgingRelease(CFWriteStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url)); 
[self.networkStream setProperty:(id)kCFBooleanFalse forKey:(NSString *)kCFStreamPropertyFTPAttemptPersistentConnection]; 
assert(self.networkStream != nil); 

success = [self.networkStream setProperty:@"userid" forKey:(id)kCFStreamPropertyFTPUserName]; 
assert(success); 
success = [self.networkStream setProperty:@"userpw" forKey:(id)kCFStreamPropertyFTPPassword]; 
assert(success); 
//- (BOOL)setProperty:(id)property forKey:(NSString *)key ,object casting needed 

self.networkStream.delegate = self; 
[self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[self.networkStream open]; 

aber mein Netzwerkstream (nsoutputqtream) im Eröffnungsstatus stecken.

meine URL, Pfad korrekt ist und das Hochladen Klasse Arbeit richtig auf alle Dateien in Ordner Eigene Dateien mit Ausnahme dieser exportierten Dateien

kann mir jemand helfen? Ich bin nicht gut in iOS Programmierung ...

Antwort

0

Core Foundation FTP-Unterstützung ist aus vielen guten Gründen veraltet. Zum einen, wenn ich mich richtig erinnere, hat es nie sehr gut funktioniert. Zum anderen ist FTP eine schreckliche Möglichkeit, Daten hochzuladen. Es fehlt Unterstützung für die Wiederaufnahme von Uploads, es fehlt jegliche Sicherheit (Klartext-Passwörter), es besteht die Gefahr, dass man sich nie verbinden kann, wenn man hinter einer NAT-basierten Firewall steckt ... im Grunde ist FTP eine Katastrophe Sie sollten es nicht einmal in Betracht ziehen, es in einer neuen App zu verwenden.

Holen Sie sich einen Webserver, installieren Sie WebDAV und verwenden Sie eine PUT-Anfrage. Damit erhalten Sie Authentifizierung, TLS (Verschlüsselung) und native NSURLSession-Unterstützung. Es ist ein viel, viel besserer Weg, um dieses Problem zu lösen.

Verwandte Themen