Flask下载后无法删除文件求助:文件被占用报错
解决Flask中send_file后无法删除文件的问题
问题出在Windows本地环境下,send_file默认打开文件后未能及时释放句柄,导致执行os.remove时文件仍被系统锁定。你可以通过手动控制文件句柄的方式解决这个问题:
修改后的代码:
import os from flask import Flask, request, send_file, after_this_request @app.route("/download") def download(): file_path = request.args.get('file_path') if not file_path or not os.path.isfile(file_path): return "文件不存在", 400 attachment_filename = os.path.basename(file_path) # 手动以二进制只读模式打开文件 file_handle = open(file_path, 'rb') # 将文件对象传入send_file,指定下载文件名 response = send_file( file_handle, as_attachment=True, download_name=attachment_filename # Flask 2.0+版本使用,旧版本替换为attachment_filename ) @after_this_request def cleanup_file(response): try: # 先关闭文件句柄,释放系统对文件的锁定 file_handle.close() os.remove(file_path) except Exception as e: print(f"删除文件失败: {e}") return response return response
关键改进点:
- 手动打开文件并持有句柄,确保能在回调中主动关闭它
- 删除文件前先调用
file_handle.close(),彻底释放Windows系统对文件的锁定 - 增加文件存在性前置校验,避免无效请求的报错
这样修改后,文件会在请求响应完成、句柄关闭后被成功删除。
内容的提问来源于stack exchange,提问作者gmferronato
相关产品推荐
相关产品推荐

