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経由でファイルをアップロードするには、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ライブラリを作成(または取得)する必要があります。

于 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 に答える