【问题标题】:NSURLConnection FTP file uploadNSURLConnection FTP 文件上传
【发布时间】:2012-10-17 14:14:27
【问题描述】:

我正在尝试使用以下代码在 FTP 服务器上上传 PNG 文件。

NSURL *ftpURL=[NSURL URLWithString:@"ftp://username:password@localhost"];

NSMutableURLRequest *urlRequest=[[NSMutableURLRequest alloc] initWithURL:ftpURL];
[urlRequest setHTTPMethod:@"POST"];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"imageUrl\"; filename=\"dummy.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Type: image/png\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

UIImage *img=[UIImage imageNamed:@"a.png"];
NSMutableData *postData=[[NSMutableData alloc] init];
NSData *data=UIImagePNGRepresentation(img);
[postData appendData:data];
[urlRequest setHTTPBody:postData];

[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];

我没有收到任何 NSURL 连接,就像它失败或要求身份验证一样。只是,我收到的回电是

-(void) connectionDidFinishLoading:(NSURLConnection *)connection

我不确定 NSURLConnection 是否支持 ftp 上传。我不打算使用 CFFTPStream 来实现它。任何人都可以纠正我的方法吗?

【问题讨论】:

  • @Otium 您提到的链接使用 CFFTPStream,但我希望尽可能使用 NSURLConnection 来完成。
  • @andyPaul:你完成过这个吗?我还希望使用 NSURLConnection 将图像上传到 FTP 服务器。虽然我用过 CFFTPStream,但现在想试试 NSURLConnection。

标签: objective-c ios file-upload ftp nsurlconnection


【解决方案1】:

我在BlackRacoon 上取得了很好的成功。

【讨论】:

  • 即使这样使用 CFFTPStream。我正在寻找它使用 NSURLConnection 来实现它。
  • 我很好奇为什么实施很重要。我认为重要的是您的应用程序可以完成 FTP 传输。
【解决方案2】:

您正在尝试一次性使用 FTP 和 POST,这几乎在任何情况下都行不通。

FTP 是一个完全不同的协议,例如http://www.faqs.org/rfcs/rfc959.html

它更具交互性,但是许多 ftp 服务器都有一个 http 包装器,可以轻松下载,但上传仍然是特殊的。所以如果你想使用它,你应该带一个库或CFFTPStream。

【讨论】:

  • 我正在使用 HTTP 进行 FTP 上传。那么,是否可以使用 NSURLConnection 使用纯 FTP 上传。
  • @andyPaul:酷,我没有成功,你的目标是普通的 FTP 服务器,你有示例代码吗?
  • 我使用的代码在我提出的问题中。 FTP 服务器是我机器上的本地 ftp 服务器。
  • 好的,我在外置的ftp服务器上试一下,再检查一遍。
  • 好的,现在我有了一些结果。总的来说很有趣,我尝试了两个不同的 ftp 服务器。两者都允许连接并且或多或少地忽略帖子附件。一个人很困惑,但另一个人按预期回复了一个目录列表(mime 类型 application/x-ftp-directory)。所以很抱歉,似乎没有一个简单的捷径可以绕过FTP协议的普通读写流处理。但是,读取文件似乎可以工作。
【解决方案3】:

通过 FTP 上传文件需要使用 FTP 命令,例如 STOR 或 APPE。并且 FTP 命令不可能使用 NSURLConnection 因为 NSURLConnection 不提供任何方式来发送 FTP 命令。为此,您必须使用 CFFTPStream。

SimpleFTPSample 示例代码显示了这一点。 https://developer.apple.com/library/ios/#samplecode/SimpleFTPSample/

具体来说,它显示下载(通过 NSURLConnection 和 CFFTPStream)、上传、目录列表和目录创建(全部通过 CFFTPStream)。

注意:CFFTPStream 没有用于删除文件的公共 API,尽管可以使用已弃用但仍然有效的 CFURLDestroyResource 删除文件。

目前无法通过 CFFTPStream 发送任意 FTP 命令。如果您需要这样做,则必须创建(或获取)您自己的 FTP 库。

【讨论】:

  • 感谢您的回答,谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多