4
を提供しています私はデータを生成し、CSVは、パンダでファイルとして保存フラスコを眺めることができ、そのデータを表示します。第2のビューは生成されたファイルを提供する。ダウンロードしたファイルを削除したい私の現在のコードは、それがsend_from_directory
で扱われる前にafter_request
は、ファイルを削除し、多分ので、パーミッションエラーが発生します。ファイルを提供した後でファイルを削除するにはどうすればよいですか?ビュー戻った後が、応答が送信される前に削除ファイルはそれを
def process_data(data)
tempname = str(uuid4()) + '.csv'
data['text'].to_csv('samo/static/temp/{}'.format(tempname))
return file
@projects.route('/getcsv/<file>')
def getcsv(file):
@after_this_request
def cleanup(response):
os.remove('samo/static/temp/' + file)
return response
return send_from_directory(directory=cwd + '/samo/static/temp/', filename=file, as_attachment=True)
技術的には、あなたがそれで開い開かれたファイルオブジェクトを持っている与えられた、あなたもかかわらず、プロセスはまだそれが開いている間、まだ周りのファイルを保持しますUNIXとして最初に降伏する前に、ファイルシステムからファイルを削除することができファイルシステムのディレクトリ内のエントリはなくなります。もちろん、すべてのファイルが送信されていることを合理的に確信している場合、または一時ファイルだった場合にのみファイルを削除したいのかどうか、またある時点で失敗しても削除したい場合があります。 –
@GrahamDumpleton問題はWindows上にあると推測していますが、これは開いているファイルの操作でうまく動作しないことを覚えています。 – davidism
誰もWebプログラミングのためにWindowsを使用することは、いつでも願っています。 ;-) –