2016-07-21 6 views
0

Je tente de charger un fichier musical iPod sur un serveur ftp. donc en utilisant AVAssetExportSession, je fais un fichier au dossier de documentsnsoutputstream bloqué dans l'état 1 (NSStreamStatusOpening = 1) - iOS - objectif 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"]; 
    } 
}]; 

et ouvrir un nsoutputstream pour mon upload ftp et obtenir le chemin du fichier exporté par délégué


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

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]; 

mais mon réseau (nsoutputqtream) s'est bloqué dans l'état d'ouverture.

mon url, chemin est correct et le téléchargement travail de classe correctement à tous les fichiers dans le dossier Mes documents, sauf pour ce fichiers exportés

quelqu'un peut me aider? Je ne suis pas bon en programmation iOS ...

Répondre

0

La prise en charge FTP de Core Foundation est déconseillée pour de nombreuses bonnes raisons. Premièrement, si je me souviens bien, cela n'a jamais très bien fonctionné. Pour un autre, FTP est un moyen horrible de télécharger des données. Il manque de support pour la reprise des téléchargements, il manque de toute sécurité (mots de passe en clair), risque de ne jamais pouvoir se connecter si vous êtes derrière un pare-feu NAT ... En gros, FTP est un désastre et demi, et vous ne devriez même pas envisager de l'utiliser dans une nouvelle application. Procurez-vous un serveur Web, installez WebDAV et utilisez une requête PUT. Cela vous donne l'authentification, le chiffrement TLS (cryptage) et le support NSURLSession natif. C'est une façon beaucoup, beaucoup mieux de résoudre ce problème.