動的に作成されるファイルのダウンロードを提供するために使用されている fs ファイルストリームがあります。このストリームを取得し、適切なヘッダーを設定した後、応答オブジェクトにパイプします。
また、ストリーム イベントをいくつか設定して、エラーが発生した場合やストリームが終了した場合に、生成されたファイルをファイル システムから削除するようにしています。
ダウンロードが正しく初期化されていない、または終了していない場合に、ファイル システムにハング ファイルが残る場合があるという問題が発生しています。これは、ストリームにフックするイベントによるものだと思います。
私のコード:
stream = fs.createReadStream( fileName, {bufferSize: 64*1024})
had_error = false;
stream.on 'error', (err) ->
had_error = err
stream.on 'close', ->
if had_error
console.log(had_error)
fs.unlink fileName, (error) ->
if error
console.log("DELETE ERROR")
console.log error
fs.unlink dataFileName, (error) ->
if error
console.log("DELETE ERROR")
console.log error
ストリーム APIドキュメントを確認すると、「close」イベントがすべてのストリームで呼び出されるわけではありません。ただし、ドキュメントによると、「終了」イベントを使用します。Indicates that no more 'data' events will happen. If the stream is also writable, it may be possible to continue writing.
「終了」イベントを使用した場合、これらのファイルを削除し、ストリームが http 応答への書き込みを完了していないと、ダウンロードが破損するという問題が発生するのではないかと心配しています。
これらのファイルを削除し、ダウンロードを中断しないためのキャッチとして使用できる「確実な」イベントはありますか?
最悪のシナリオでは、これらのファイルを削除するために cronjob を作成します (bleh)。