nsoutputstream 停留在状态 1(NSStreamStatusOpening = 1) - iOS - objective c

nsoutputstream stuck in status 1(NSStreamStatusOpening = 1) - iOS - objective c

我尝试将 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) 卡在打开状态。

我的 url,路径正确并且上传 class 可以正常上传到我的文档文件夹中的所有文件,除了这个导出的文件

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

Core Foundation 的 FTP 支持已弃用,原因有很多。其一,如果我没记错的话,它从来都不是很好用。另一方面,FTP 是一种糟糕的上传数据方式。它不支持恢复上传,它缺乏任何安全性(明文密码),如果你在基于 NAT 的防火墙后面,就有永远无法连接的风险……基本上,FTP 是一场灾难,一半,你甚至不应该考虑在新应用中使用它。

给自己一个网络服务器,安装 WebDAV,然后使用 PUT 请求。这为您提供身份验证、TLS(加密)和本机 NSURLSession 支持。这是解决这个问题的好得多的方法。