1

FTPサーバーからファイルをダウンロードしています。ファイルの内容は時々変更されます。ファイル名は常に同じです。

このシナリオは可能ですか?

  1. ファイルの内容は「aaaaaaaaaaaaa」です
  2. ダウンロードを開始します
  3. ファイルが上書きされ、「bbbbbbbbbbbbb」のようになります
  4. 取得するファイルの内容は「aaaaabbbbbbb」です

ダウンロードに使用するライブラリはapachecommons-netです。

使用されるコードは次のとおりです。

FTPClient ftpClient = new FTPClient();
//client connecting code...
//...
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ftpClient.retrieveFile(path, outputStream);
outputStream.writeTo(new FileOutputStream(new File("myFile.txt")));
4

3 に答える 3

2

これは実際に起こりえます。そのため、ダウンロードする前にファイルのチェックサムを取得することをお勧めします。(FTPサイトコマンドを使用してサーバー上でスクリプトを実行し、チェックサムを取得します)、ダウンロード後、ダウンロードしたファイルのチェックサムと比較します。

于 2012-07-30T14:47:11.383 に答える
0

UNIXサーバーを使用している場合は、ダウンロード中にファイルが変更されることはありません。接続が中断された後の変更に対してできることは何もありません。ただし、ダウンロードするファイルを変更しないようにするには、FTPサーバーへのファイルのアップロードまたは作成のプロセスを変更する必要があります。まず、ファイルを一時ファイル名にアップロードします。私はbashで$RANDOMを使用していますが、実際には問題ではありません。同じディレクトリに正当なファイルと同じname.tmpが存在しない限り、.tmpサフィックスで十分です。次に、mvtempname.tmpsamenameを実行します。移動はUNIXサーバーの不可分操作です。つまり、開始したユーザーは引き続き元のファイルをダウンロードします。移動後にファイルを開くユーザーは、代わりに新しいファイルのダウンロードを開始します。FTPサーバーによって開かれたすべてのハンドルが閉じられると、古いファイルはカーネルによって削除されます。

于 2012-07-30T15:08:27.003 に答える
0

はい、FTP サーバーがどのように実装されているか、およびサービスを提供している領域にファイルがどのように書き込まれているかによって、シナリオは可能です。

これに対処するために FTP クライアント/プロトコル レベルでできることは何もありません。

ただし、サーバー側アプリケーションで更新されたファイルのチェックサムまたはハッシュを生成して書き込み、それを FTP 領域にも書き込むことで、アプリケーション レベルで対処できます。その後、クライアントはデータ ファイルとチェックサム ファイルを読み取り、データ ファイルのチェックサムが正しいことを確認できます。一致しない場合、解決策は 2 つのファイルを再度フェッチすることです。

于 2012-07-30T14:47:56.597 に答える