我尝试将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编程......答案 0 :(得分:0)
Core Foundation的FTP支持已被弃用,原因很多。首先,如果我没记错的话,它从来没有奏效过。另一方面,FTP是一种上传数据的可怕方式。它缺乏恢复上传的支持,它缺乏任何安全性(明文密码),如果你在基于NAT的防火墙后面,则冒着永远无法连接的风险......基本上,FTP是一个灾难和一半,并且你甚至不应该考虑在新的应用程序中使用它。
获取Web服务器,安装WebDAV并使用PUT请求。这为您提供身份验证,TLS(加密)和本机NSURLSession支持。这是解决这个问题的更好,更好的方法。