You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:19