2016-04-05 3 views
0

pureftpdの使用1276541542バイトのファイルの1%または約15メガバイトをアップロードしました。それから、クライアントがISPから派生したことをシミュレートするために、ネットワーク接続を異常終了させました。それから私は1時間待った。その後、APPE(追加)コマンドを再接続して発行し、残りのファイルをアップロードしました。アップロードが完了した後のサーバー上のファイルの最終サイズは1292326238であり、これは約15メガバイト以上のものでした。ファイルが壊れています。遅い追加のためにアップロードされたファイルが壊れてしまうのを防ぐFTPサーバーの正しい方法は何ですか?FTPサーバーが、後で追加されたために壊れたアップロードファイルを防ぐ正しい方法は何ですか?

+1

私はAPPEを正しく使用することはクライアントに依存していると思います。また、1276541542バイトのファイルは約15メガバイトではありません。それはギグを超えている。 – daveloyall

+0

私はそれを誤解していると思う、それは1276541542バイトのファイルで、1276541542の1%は約15メガです。 –

答えて

1

FTPサーバーが、後で追加されたために壊れたアップロードファイルを防止する正しい方法は何ですか?

ファイルがどのファイルであるべきかわからないため、FTPサーバーがアップロードされたファイルの破損を防ぐ方法はありません。

しかし、サーバは、SIZEコマンドを実装することによって、クライアントが適切なアップロードを行うのを助けることができます。このコマンドを使用すると、クライアントはサーバー上の現在のファイルサイズ、したがってアップロードを続けるファイル内の位置を判断できます。もちろん、このロジックはクライアント側で実装する必要があります。

+0

しかし、確かにFTPサーバーは、すべてのバイトの終わりにユーザーがデータ接続を正しく閉じたかどうか、またはユーザーがハングアップして接続を決して閉じていないかどうかを知ることができます。 2番目のケースは、完全なファイルではなく、断片であることを意味します。 –

+0

@AndrewArrow:そうではありません。クライアントプロセスがクラッシュした場合、オペレーティングシステムはTCP接続を閉じます。または、ユーザーが転送を明示的に打ち切ります。このような場合、サーバーは接続が閉じられた理由、サーバーが閉じられたことだけをサーバーが検出することはできません。 ABORコマンドは、ユーザーが中断してもFTPクライアントがクラッシュするのではなく、ちょっとした助けになるかもしれません。 –

+0

@AndrewArrow、OK、FTPサーバーが異常終了を検出したとしましょう。 (例えば、 'peer by connection reset').FTPサーバは、それについて何をすべきですか?初めてFTPサーバーが正しいファイルサイズを学習するのはいつですか? – daveloyall

0

私はpure-uploadscript --run /home/aa/done.rb —daemonize

を実行していることだし、私のdone.rbプログラムが

#!/usr/bin/env ruby 
puts "done" 
f=File.open("/home/aa/ddd.txt", "w") 
f << "test" 
f.close 

であると私はpure-ftpd —uploadscriptを実行し、アップロードするとき、それはだアップロードスクリプト

について純粋-FTPDの答えを持っています十分なdone.rbプログラムが実行されていることを確認してください。

(私はddd.txtと呼ばれる新しいファイルがあるcuzを、それが実行しています知っている)

が、私は大きなファイルをアップロードすることだし、アップロードdone.rbの途中でFTPクライアントを殺すはまだ実行されます。 (はい、私はddd.txtを最初に削除しました)

したがって、質問に対する答えは、FTPプロトコルの制限のためにEVEN pureftpdがこれを処理できないということです。

関連する問題