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 ソフトウェアを使用する場合でも、頑張ってください!