iOS基本的FTP设置; 读写stream
我试图创build一个iOS 5的应用程序与一些非常基本的FTPfunction,需要一些指导。 它将连接到本地networking上的设备,并使用.dat / txt文件执行读取/写入操作。 我已经做了一些search过去几天,并看到了各种build议,但不够简单,我可以拿起,并迅速修改我个人的用途。
我的问题是这些:
- 有什么教程/示例代码,你可以推荐给我?
- 我应该使用哪些框架和类来进行基本的读/写操作?
最后,我应该提到,我已经给了大量时间来分析Apple的SimpleFTPSample,但是示例代码给出了每个示例的“连接失败”和“stream式打开错误”通知,所以我对它的一些警告用处。
原谅我,如果这已经在别处回答。 所有相关的post都有我需要的答案,但不是全部。 先谢谢你!
编辑澄清:一个明确的例子或分步教程是我真的很喜欢。 我自己的谷歌search什么都没有,我迫切需要一些指导。
更新:我很久以前发布了这个问题,但继续使用接受的答案中提到的FTPHelper。 我最近刷新了旧项目的灰尘,意识到FTPHelper的获取函数有一点点内存泄漏,如果重复调用,可能会成为一个应用程序杀手。 如果anybdy绊倒了这个问题,并select使用FTPHelper,一定要添加下面的代码中看到的CFRelease行。
- (void) fetch: (NSString *) anItem { if (!self.uname || !self.pword) COMPLAIN_AND_BAIL(@"Please set user name and password first"); if (!self.urlString) COMPLAIN_AND_BAIL(@"Please set URL string first"); NSString *ftpRequest = [NSString stringWithFormat:@"%@/%@", self.urlString, [anItem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; /* CFShow(ftpRequest); */ NSString *writepath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; self.filePath = [writepath stringByAppendingPathComponent:anItem]; CFURLRef writeURL = CFURLCreateFromFileSystemRepresentation (NULL, (const UInt8 *) [writepath UTF8String], [writepath length], NO); MySimpleDownload((CFStringRef)ftpRequest, writeURL, (CFStringRef) self.uname, (CFStringRef)self.pword); CFRelease(writeURL);//ADD THIS LINE TO FIX MEMORY LEAK }
SimpleFTPSample应用程序正在运行完美,可能有一个问题,你看不到。 我可以推荐你(除了苹果的例子)是检查这个例子,其中包含所有基本的FTP操作的助手类。 有一点要注意的是iOS 5 ARC。 苹果的例子和我链接的是iOS版本。
基本上有两种方法可以在iOS 5中使用它们 – 通过在[您的项目] – > TARGETS – > [Your app] – > Build Phases – > Compile中通过添加-fno-objc-arc
标志来告诉编译器不使用ARC来源 – > [您的文件],或者使用Xcode中的内置工具转换为ARC。
我个人testing只有第一种方法,它适用于我。
如果这不能帮助你,我可以写一个例子,但不幸的是今天我很忙。
更新:
基本机制是使用[FTPHelper list:THE_FTP_URL]
列出文件夹的内容,然后使用[FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING]
创build一个包含内容并根据types(文件或文件夹)下载的[FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING]
。 从这里你必须执行
- (void) downloadFinished { //do the reading depending on the file type NSData *data = [NSData dataWithContentsOfFile:[FTPHelper sharedInstance].filePath]; }
上传是以类似的方式实现的 – 使用[FTPHelper upload:FILE_TO_UPLOAD]
和文件系统中的文件。
有很多你可以使用的库,他们工作得很好。 🙂
例如:
http://www.chilkatsoft.com/ftp-objc.asp
http://code.google.com/p/ios-ftp-server/
我build议使用它们,因为编码一个人会花很多时间:)有一点要记住,正如o15a3d4l11s2所说的,是要知道ARC。 如果你使用它,不要忘记添加构build标志到非ARC的库。