NSURLConnection FTP文件上传

时间:2012-10-27 15:57:05

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

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

3 个答案:

答案 0 :(得分:2)

BlackRacoon我取得了很好的成绩。

答案 1 :(得分:2)

通过FTP上传文件需要使用STOR或APPE等FTP命令。使用NSURLConnection无法使用FTP命令,因为NSURLConnection不提供任何发送FTP命令的方法。要做到这一点,你必须使用CFFTPStream。

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

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

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

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

答案 2 :(得分:1)

您正试图一次性使用FTP和POST,这几乎不会在任何情况下都有效。

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

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