私のアプリケーションは、ユーザーがファイルをアップロードできる一連のフォルダーを監視しています。ファイルのアップロードが完了すると、処理を適用する必要がありますが、ファイルのアップロードが完了していないことを検出する方法がわかりません。
FTPサーバーによってファイルがまだリリースされていないかどうかを検出する方法はありますか?
この問題に対する一般的な解決策はありません。
一部のFTPサーバーは、アップロード中のファイルをロックして、ファイルのアップロード中はアクセスできないようにしています。たとえば、IIS FTPサーバーはそれを行います。他のほとんどのFTPサーバーはそれを行いません。 アップロード時にファイルにアクセスできないようにする)で私の回答を参照してください 。
問題にはいくつかの一般的な回避策があります(元々は SFTPファイルロックメカニズム に投稿されていますが、FTPにも関連しています)。
一部のFTPサーバーでは、アップロードが完了したときに呼び出されるフックを構成できます。あなたはそれを利用することができます。たとえば、ProFTPDには mod_exec module があります(ExecOnCommand
ディレクティブを参照)。
ftputil を使用して、この回避策を実装します。
このFTPフェッチ全体は古く、時代遅れのテクノロジーです。私は顧客が次回最新のhttp APIを使用することを望みます:-)
特定の拡張子のファイルを読み取る場合は、ファイル転送に[〜#〜] winscp [〜#〜]を使用します。拡張子。filepartが付いた一時ファイルが作成され、ファイルが完全に転送されると、実際のファイル拡張子に変わります。
私はそれが誰かを助けることを願っています。
これはFTP転送の典型的な問題です。私が見つけた唯一のmostly信頼できる方法は、ファイルを送信してから、2番目の短い「マーカー」ファイルを送信して、最初の転送が完了したことを受信者に伝えるだけです。ファイルの命名規則を使用して、2番目のファイルの存在を確認するだけです。
空想になって、2番目のファイルの内容を最初のファイルのチェックサムにするかもしれません。次に、最初のファイルを確認できます。 (ファイルサイズ=チェックサムサイズになるまで待つだけなので、2番目のファイルに問題はありません)。
もちろん、これは、送信者に2番目のファイルを送信させる場合にのみ機能します。