一時ファイルのクリーン操作ガイド
DEXTUpload.NET Professional製品は、ファイルをアップロードするとき、常に一時ファイルを生成する中間段階を持っている。
クライアント(ブラウザ、Third-partyまたは他のプログラム)でHTTPプロトコルを使用してサーバーに転送された要求データは、「FileUploadMonitorModule」モジュールを介して、一時ファイルが生成される。このように作成される一時ファイルは、aspxページ、ashxジェネリックハンドラは、MVC環境で、Controllerのアクションメソッド内で使用できる「FileElement「オブジェクト(「IFileManagement」インタフェースを実装した)を介してアクセスが可能となる。「FileElement「オブジェクトは「FileUpload 'または' DEXTPostedFile」オブジェクトを介して取得することができ、このオブジェクトの「Save、SaveAs」メソッドを使用して最終目的地にファイルを保存するようになる。
一時ファイルは、DEXT - *。tmp型の名前を持つ。このファイルは、「FileElement」の「Save、SaveAs」メソッドを使用して保存操作をすると、保存した後、一時ファイルは削除(または移動)される。逆に、保存操作を行わないと、一時ファイルは残りますが、これに残っている一時ファイルをコードから直接削除せずに、コンポーネントから自動的に削除するには、一般的な、またはウェプポム環境では、「FileUpload「オブジェクトの「Dispose」メソッドが呼び出されるように構成必要があり、MVC環境では、「UseDEXTAttribute」アトリビュートがアクションメソッドに装飾されるべきである。
#一般的またはウェプポム環境で // usingステートメントを抜けたときDisposeメソッドが内部的に呼び出されます。 using (var dext = new FileUpload()) { ... } //または var dext = null as FileUpload; try { dext = new FileUpload(); ... } catch ... finally { if (dext != null) dext.Dispose(); }
#MVC環境で //アクションメソッドが終わるとき、「UseDEXTAttribute」で一時ファイルを削除する。 [UseDEXT] public ActionResult Upload(List<DEXTPostedFile> files) { ... }
上記のような処理をしていない場合は、一時ファイルが残ってようになる。 (コードの構成の問題でも、一時ファイルが残ることがあるが、「FileUploadMonitorModule」モジュールで解析する過程でエラーが発生した場合、ターゲットは削除されないジャンクファイルに残ってようになる。)
大容量ファイルのアップロード環境では、これらのジャンクファイルが頻繁に発生することができる。ジャンクファイルと大容量ファイルのアップロード中に、完全な一時ファイルを作成するために、ファイルのデータをまとめる作業をするが、ユーザーアクションまたはエラーの問題で作業が中断されると、その一時ファイルは、ジャンクファイル(元のファイルと他の)になる。これらのジャンクファイルはaspx、ashx、controllerのアクションメソッドで検出することができないので、常に残るようになる。
削除されなかった一時ファイルやジャンクファイルを削除するには、内部のクリーナーモジュールを駆動しなければならない。
クリーナーを駆動するためには、「Web.config」<dextupload.net>セクションの<settings>要素で「enableCleaner」属性の値を設定する必要がある。
<dextupload.net> <settings tempPath="~/files/temp" ... cleanerIntervalTime="60000" timeAgoForCleaning="24" enableCleaner="true" ... /> </dextupload.net>
「enableCleaner」デフォルト値はfalseであるため、普段はクリーナーが動作しない。このプロパティをtrueに設定すると、最初のアップロード時にクリーナーが駆動される。
クリーナーは「cleanerIntervalTime、timeAgoForCleaning「属性の指定値またはデフォルト値を持っている一時フォルダに存在する一時ファイル、ジャンクファイルを削除する準備をする。たとえば、「cleanerIntervalTime」の値が60000であり、「timeAgoForCleaning」の値が24であれば、1分ごとに「tempPath」属性が指す一時フォルダから、最近の変更日付が24時間前(含む)のすべての一時ファイルのリソース(DEXT- * .tmp、DEXT - *。tmp.EXTENSION)を除去する。
大容量ファイルのアップロードの場合、一時ファイルが存在すれば、数日が過ぎても続いて上げることができる。しかし、クリーナーが動作するようになれば、「timeAgoForCleaning」属性で指定された時間が経過ファイルはすべて削除されるので、期限が過ぎたファイルは引き続き上昇しない。
「DEXTUpload.NET.FileElement「クラスの「Keep」メソッドを使用して一時ファイルをそのまま使用するように設定してもクリーナーは対象を削除する。
多数のWebアプリケーションの1つの一時フォルダを共有(またはサブを含む)する場合にクリーナーを使用すると、複数のプロセスが一時ファイルを削除する過程で、I / Oの競合の問題が発生することができる。