Flask:发送一个zip文件,然后删除它

2024-05-13 01:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个flask应用程序中工作,它从web服务器的一个文件夹中获取几个文件,然后创建一个包含这些文件的zip文件,最后将该zip文件发送给用户。我的问题是,在发送zip文件后,我无法从web服务器中删除它。在

我试图用@after_this_request命令解决这个问题。在

这里我展示了我编写的代码的简化版本。我发送先前创建的zip文件,然后尝试删除它。在

@app.route('/sendFile')
def sendFile():
    @after_this_request
    def removeFile(response):
        os.remove(zip_path)
        return response

    return send_from_directory(path, filename=zipname, as_attachment=True)

问题是,会出现一个错误,说明无法删除zip文件,因为它仍在被其他进程使用。我在其他类型的文件中也看到过类似的问题:

Flask - delete file after download

Remove file after Flask serves it

但是,在我的案例中,它们对zip文件不起作用。在


Tags: 文件path服务器webflaskreturnresponserequest
1条回答
网友
1楼 · 发布于 2024-05-13 01:14:14

您可以以字节形式读取文件,删除zip,然后使用烧瓶。反应. 类似这样的方法可能会奏效:

from flask import Response

@app.route('/sendFile')
def sendFile():
    with open(os.path.join(path, zipname), 'rb') as f:
        data = f.readlines()
    os.remove(os.path.join(path, zipname))
    return Response(data, headers={
        'Content-Type': 'application/zip',
        'Content-Disposition': 'attachment; filename=%s;' % zipname
    })

相关问题 更多 >