nsoutputstream陷入状态1(NSStreamStatusOpening = 1) - iOS - 目标c

时间:2016-07-21 09:02:20

标签: ios objective-c iphone nsstream nsinputstream

我尝试将iPod音乐上传到ftp服务器。 所以使用AVAssetExportSession,我在文件夹

创建一个文件
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)处于开放状态。

我的网址,路径是正确的,上传课程正常工作到我的文档文件夹中的所有文件,除了这个导出的文件

谁能帮助我吗?我不擅长iOS编程......

1 个答案:

答案 0 :(得分:0)

Core Foundation的FTP支持已被弃用,原因很多。首先,如果我没记错的话,它从来没有奏效过。另一方面,FTP是一种上传数据的可怕方式。它缺乏恢复上传的支持,它缺乏任何安全性(明文密码),如果你在基于NAT的防火墙后面,则冒着永远无法连接的风险......基本上,FTP是一个灾难和一半,并且你甚至不应该考虑在新的应用程序中使用它。

获取Web服务器,安装WebDAV并使用PUT请求。这为您提供身份验证,TLS(加密)和本机NSURLSession支持。这是解决这个问题的更好,更好的方法。