Send A File To The User, Then Delete File From Server
I want my server to send a file to the user, and then delete the file. The problem is that in order to return the file to the user, i am using this: return send_file(pathAndFilenam
Solution 1:
Since send_file already returns the response from the endpoint, it is no longer possible to execute code afterwards.
However, it is possible to write the file to a stream before the file is deleted and then to send the stream in response.
from flask import send_file
import io, os, shutil
@app.route('/download/<path:filename>')
def download(filename):
    path = os.path.join(
        app.static_folder,
        filename
    )
    cache = io.BytesIO()
    with open(path, 'rb') as fp:
        shutil.copyfileobj(fp, cache)
        cache.flush()
    cache.seek(0)
    os.remove(path)
    return send_file(cache, as_attachment=True, attachment_filename=filename)
In order to achieve better use of the memory for larger files, I think a temporary file is more suitable as a buffer.
from flask import send_file
import os, shutil, tempfile
@app.route('/download/<path:filename>')defdownload(filename):
    path = os.path.join(
        app.static_folder,
        filename
    )
    cache = tempfile.NamedTemporaryFile()
    withopen(path, 'rb') as fp:
        shutil.copyfileobj(fp, cache)
        cache.flush()
    cache.seek(0)
    os.remove(path)
    return send_file(cache, as_attachment=True, attachment_filename=filename)
I hope your conditions are met. Have fun implementing your project.
Post a Comment for "Send A File To The User, Then Delete File From Server"