【问题标题】:iOS basic FTP setup; Read and Write StreamiOS 基本 FTP 设置;读写流
【发布时间】:2012-03-29 04:19:15
【问题描述】:

我正在尝试创建一个具有一些非常基本的 FTP 功能的 iOS 5 应用程序,并且需要一些指导。它将连接到本地网络上的设备并使用 .dat/txt 文件执行读/写操作。在过去的几天里,我进行了一些搜索,并看到了各种建议,但没有什么简单到我可以拿起并快速修改以供我个人使用。

我的问题是:

  1. 有什么教程/示例代码可以推荐给我吗?
  2. 对于基本的读/写操作,我应该使用哪些框架和类?

最后,我应该提一下,我已经花了相当多的时间来分析 Apple 的 SimpleFTPSample,但是示例代码为每个示例都给出了“连接失败”和“流打开错误”通知,所以我有点警惕它的用处。

如果这已在其他地方得到回答,请原谅我。所有相关帖子都有我需要的答案,但不是全部。提前谢谢!

为清楚起见进行编辑:我真正想要的是一个定义明确的示例或分步教程。我自己的 Google 搜索结果一无所获,我迫切需要一些指导。

更新: 我很久以前就发布了这个问题,但继续使用接受的答案中提到的 FTPHelper。我最近清理了旧项目的灰尘,并意识到 FTPHelper 的 fetch 函数中存在轻微的内存泄漏,如果重复调用它可能会成为应用程序杀手。如果任何人偶然发现这个问题并选择使用 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 
}

【问题讨论】:

  • 能否发代码源代码如何实现不联网下载文件的ftp

标签: iphone objective-c ios ios5 ftp


【解决方案1】:

SimpleFTPSample 应用程序运行完美,可能存在您看不到的问题。我可以向您推荐的(Apple 的示例除外)是检查 THIS 示例,该示例包含所有基本 FTP 操作的帮助程序类。需要注意的一件事是 iOS 5 ARC。 Apple 的示例和我链接的示例都适用于较旧的 iOS 版本。

在 iOS 5 中基本上有两种使用它们的方法 - 通过在 [Your project] -> TARGETS -> [Your app] -> Build Phases -> Compile 中添加 -fno-objc-arc 标志来告诉编译器不要使用 ARC Sources -> [Your file],或者使用 Xcode 中的内置工具转换为 ARC。

我个人只测试了第一种方法,它对我有用。

如果这对你没有帮助我可以写一个例子,但不幸的是我今天很忙。

更新:

基本机制是使用[FTPHelper list:THE_FTP_URL] 列出文件夹的内容,然后使用[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] 和来自文件系统的文件。

【讨论】:

  • 嗯,我想知道我在 SimpleFTP 上做错了什么。无论如何,谢谢你的另一个例子。我现在正在修补它,它已经给出了结果(一个很好的节奏变化!)。假设您熟悉 FTPHelper 类,您会如何推荐下载 foo.txt 并阅读其内容?或者将内容写入 foo2.txt 并上传如何?
  • 我编辑了我的答案,你可以检查一下。如果有不清楚的地方,请随时提问。
  • 太棒了。终于有东西可以工作了,真是一种解脱。谢谢!
  • 我很高兴能帮上忙。请记住,如果您想构建一个具有启动/暂停功能的完全可靠的 FTP 客户端、处理网络连接丢失和其他问题,那么工作量就太大了。这就是为什么您还可以查看 Dominik Hadl 建议的现成库的原因。
  • 如何下载整个文件夹?我正在使用 [FTPHelper 下载:@"FolderName"];它只是下载零字节。谢谢
【解决方案2】:

您可以使用许多库,并且它们运行良好。 :)

例如:

http://www.chilkatsoft.com/ftp-objc.asp

http://code.google.com/p/ios-ftp-server/

我建议使用它们,因为自己编写一个代码会花费很多时间 :) 正如 o15a3d4l11s2 所说,要记住的一件事是注意 ARC。如果您使用它,请不要忘记将构建标志添加到不是 ARC 的库中。

【讨论】:

  • 感谢您提供替代库。我想我可能会坚持使用 FTPHelper,但这些东西往往需要备份计划,所以拥有这些非常棒。
  • 我需要制作一个支持上传较大视频的应用程序,即使该应用程序在后台,我可以使用它吗?您可以使用许多库,它们运行良好。 :) 例如:chilkatsoft.com/ftp-objc.asp??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2012-02-10
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多