6

FTP サーバーを操作しようとしています。私はすべてをグーグルで調べましたが、私のような初心者にはすべてを理解するのが困難です. SimpleFTPSample は一度にたくさんあるのでわかりにくいです。ビュー、ボタン、ラベル、テキストフィールド、アップロード、ダウンロード、リクエスト、リスト、取得。BlackRaccoon と他のすべてと同じです。

ビューやボタンを使用せずに、「test.txt」をFTPサーバーに簡単かつプログラム的にアップロードする方法:Xcode(iPhoneアプリ)で「192.168.1.111」。たとえば、ViewDidLoad に含めることができるコードだけです。

多分このような何か?:

NSURL* url = [NSURL URLWithString:@"ftp://username:pw@189.92.32.34"];
CFReadStreamRef stream = CFReadStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url);
stream.delegate= self;
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[stream open];

しかし、どのファイルですか?これを拡張するか、新しいコードを記述します。わかりません、これは私にとって新しいことです。

ありがとうジョナサン

4

2 に答える 2

7

Black Raccoon のライターとして、私は偏見を持っているかもしれません (まあ、私が偏見を持っていることは知っています)。やりたいことを見てみましょう。ファイルをアップロードします。

ファイルをアップロードするために必要なものは 4 つあります。起動コード、次に 4 つのデリゲート メソッド (上書きチェック、データ、成功、失敗) です。ファイル全体をメモリに読み込むと仮定しましょう (2 MB 未満の小さなファイルの場合は問題ありません)。

まず、ヘッダーにこれが必要です。

    BRRequestUpload *uploadData;  // Black Raccoon's upload object
    NSData *uploadData;           // data we plan to upload

コード部分は次のとおりです。

- (IBAction) uploadFile :(id)sender
{
    //----- get the file path for the item we want to upload
    NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filepath = [NSString stringWithFormat: @"%@/%@", applicationDocumentsDir, @"file.text"];

    //----- read the entire file into memory (small files only)
    uploadData = [NSData dataWithContentsOfFile: filepath];

    //----- create our upload object
    uploadFile = [[BRRequestUpload alloc] initWithDelegate: self];

    //----- for anonymous login just leave the username and password nil 
    uploadFile.path = @"/home/user/myfile.txt";     
    uploadFile.hostname = @"192.168.1.100";
    uploadFile.username = @"yourusername";
    uploadFile.password = @"yourpassword";

    //----- we start the request
    [uploadFile start];
}

1 つ目は、既存のファイルを上書きするかどうかをコードに尋ねます。

-(BOOL) shouldOverwriteFileWithRequest: (BRRequest *) request
{
    //----- set this as appropriate if you want the file to be overwritten
    if (request == uploadFile)
    {
        //----- if uploading a file, we set it to YES (if set to NO, nothing happens)
        return YES;
    }
}

次に、Black Raccoon は、送信するデータのチャンクを要求します。非常に大きなファイルがある場合は、一度にすべてを送信しようとしないでください。Apple の API がチョークしてデータをドロップします。ただし、小さなチャンクが 1 つしかないため、次のようにします。

- (NSData *) requestDataToSend: (BRRequestUpload *) request
{
    //----- returns data object or nil when complete
    //----- basically, first time we return the pointer to the NSData.
    //----- and BR will upload the data.
    //----- Second time we return nil which means no more data to send
    NSData *temp = uploadData;   // this is a shallow copy of the pointer

    uploadData = nil;            // next time around, return nil...

    return temp;
}

これは小さなファイルに対してのみ実行できることを覚えておいてください。

次に、完了ハンドラーがあります (計画どおりに機能した場合)。

-(void) requestCompleted: (BRRequest *) request
{
    if (request == uploadFile)
    {
        NSLog(@"%@ completed!", request);
        uploadFile = nil;
    }
}

最後に、失敗ハンドラがあります。

-(void) requestFailed:(BRRequest *) request
{
    if (request == uploadFile)
    {
        NSLog(@"%@", request.error.message);
        uploadFile = nil;
    }
}

言うのと同じくらい簡単であれば素晴らしいことですが、そうすべきではない[BRFtpUploadTo: dest srcfile: srcFile destfile: dstFile]理由はたくさんあります。その一部は、Apple が内部 FTP をどのように実装したかに関係しています。ブロックやエラーなどの問題もあります。結局のところ、FTP は些細なことのように思えますが、最終的には悪夢のようなものになります。

FTP は自明ではないため、非常に多くの実装があります。Black Raccoon が最高であると主張しているわけではありませんが、数分から数日の間の問題に対応して維持されています。

最初は難しそうに見えるかもしれませんが、私の意見では、Black Raccoon は優れた FTP ライブラリの 1 つです。問題への対応に優れた高品質の製品にするために、多くの時間と労力を費やしました。これを無料で行うにはどうすればよいですか?音量。;)

最終的にどのような FTP ソフトウェアを使用する場合でも、頑張ってください!

于 2013-08-22T15:22:59.840 に答える
0
  1. アップロード時にアップロードパスが必要です。これが FTP の仕組みです。

  2. ポートは標準の FTP ポートです。APIに違反せずにこれを変更する方法はありません。それを理解した場合、Apple のチェックを通過しない可能性が高くなります。

  3. このコードは、任意のファイルをアップロード/ダウンロードします。

  4. 安全な条件下でこれを機能させる方法がわかりません。これは Apple の FTP プロトコルを使用します。これをゼロから構築した、はるかにインテリジェントな他の FTP パッケージがあります。私はそれらを調べます。

BR は、単純な FTP 通信が必要だったために設計されました。White Raccoon は私のためにこれをしませんでした。

于 2014-07-07T11:57:55.800 に答える