python-3.xflaskdelete-filesendfile

Flask: delete file from server after send_file() is completed


I have a Flask backend which generates an image based on some user input, and sends this image to the client side using the send_file() function of Flask.

This is the Python server code:

@app.route('/image',methods=['POST'])
def generate_image():
    cont = request.get_json()
    t=cont['text']
    print(cont['text'])
    name = pic.create_image(t) //A different function which generates the image
    time.sleep(0.5)
    return send_file(f"{name}.png",as_attachment=True,mimetype="image/png")

I want to delete this image from the server after it has been sent to the client.

How do I achieve it?


Solution

  • Ok I solved it. I used the @app.after_request and used an if condition to check the endpoint,and then deleted the image

    @app.after_request
    def delete_image(response):
        global image_name
        if request.endpoint=="generate_image": //this is the endpoint at which the image gets generated
            os.remove(image_name)
        return response