0

我正在尝试使用以下代码在 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 来实现它。任何人都可以纠正我的方法吗?

4

3 回答 3

2

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

于 2012-10-27T16:26:48.880 回答
2

通过 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 库。

于 2013-10-22T10:51:25.867 回答
1

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

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

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

于 2012-10-27T16:46:42.700 回答