解決策 1
制御不能な要因 (「スタック」したスレッド、サービス/サーバーのシャットダウンなど) により、100% 真のアカウンティングが得られる可能性は非常に低いことを考慮すると、次のようにすることができます。
総リクエストのみを追跡したい場合は、ファイルの提供を開始するときにインクリメントするアプリケーション変数を使用できます。次に、コンテンツが完了したら、カウントを減らします。ただし、cflock を使用して、この更新によって問題が発生しないように注意してください。
これをファイルに記録したい場合は、同じことを行うことができますが、ファイルを同時に読み書きするリクエストで問題が発生しないように、cflock でラップします。
SQL を使用している場合は、ファイルを表すテーブルを作成し、フェッチごとにレコードと適切な情報を追加できます
- ファイル名
- はい/いいえフィールドのビットとして完了、デフォルトは false
- ユーザー/クライアント情報
- 開始日/時刻のデフォルトは今、
- 終了日時のデフォルトはnull、
- ステータス「ダウンロード中」
- その他の情報
返された ID cfcontent を使用してファイルを作成し、完了したら、指定された ID で正しい日付/時刻とステータス「成功」を使用してテーブルを更新し、yes に完了します。
onerror の間、ステータス「エラー [関連するエラーの詳細]」を反映してテーブルを更新し、完了を 1 にすることができます。キャッチオール更新を追加して完了 = 1 に変更するか、そうでないレコードをパージすることは悪い考えではありません。利用可能 (アプリケーションの起動時または一定期間後)
これにより、現在保留中のリクエストの合計 (およびその内容など) をこのテーブルに問い合わせることができます。
ただし、それは実行時間の長いリクエストの問題にのみ対処します。
解決策 2
理想的には、問題はファイルの内容を安全に返すことです。ファイルの機密性に応じて (たとえば、非公開が優先されるが、そうでない場合は世界の終わりではない)、適切に Web アクセス可能なディレクトリにファイルを "コピー" できますが、名前には UUID を使用します。したがって、Secret1.pdf の場合、cfdirectory を使用してディレクトリを作成し、そのファイルをそのファイルにコピーするとします。次のようなものを提供します。
/files/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx/Secret1.pdf を実行し、そのディレクトリにリダイレクトするために a を実行します。
次に、スケジュールされたタスクまたはゲートウェイ、または設定した時間数より古いディレクトリをパージするための任意の方法をセットアップできます。たとえば、ディレクトリ xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx とそのすべてのファイルを 30 分後に削除します。