2016-07-21 5 views
0

私はiPodの音楽をftpサーバにアップロードしようとしています。 そうAVAssetExportSessionを使用して、私はドキュメントフォルダステータス1(NSStreamStatusOpening = 1)で停止したnsoutputstream - iOS - 目的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"]; 
    } 
}]; 

でファイルを作成し、私は私のFTPアップロードのためのnsoutputstreamを開き、代理人を通じてエクスポートされたファイルのパスを取得


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

ただし、ネットワークストリーム(nsoutputqtream)が開かれた状態でスタックしました。

私のURL、パスはこれ以外マイドキュメントフォルダ内のすべてのファイルに適切に補正し、アップロードクラスの仕事である

誰も私を助けることができるファイルをエクスポートしますか?私はiOSプログラミングにうまくいきません。

答えて

0

多くの理由から、Core FoundationのFTPサポートは廃止されました。 1つは、私が正しく覚えていれば、それは決してうまく機能しませんでした。また、FTPはデータをアップロードするための恐ろしい方法です。それはアップロードを再開するためのサポートが欠けています。何らのセキュリティ(クリアテキストパスワード)もなく、NATベースのファイアウォールの背後にいるなら絶対に接続できない危険性があります...基本的にFTPは災害であり、あなたは新しいアプリでそれを使うことを考慮すべきではありません。

Webサーバーを入手し、WebDAVをインストールし、PUTリクエストを使用します。これにより、認証、TLS(暗号化)、およびネイティブのNSURLSessionのサポートが提供されます。この問題を解決する方法はずっと良い方法です。

関連する問題