【问题标题】:Best way to serve file to html page once in flask (python)在烧瓶(python)中将文件提供给html页面的最佳方式
【发布时间】:2018-05-22 13:16:36
【问题描述】:

对于一项任务,我们需要创建一个以 Flask 或 django 作为后端的网站。我一直在努力,几乎完成了,但遇到了一个我似乎无法真正解决的问题。我让用户通过 url 或上传向网站提交照片。我会对图像做一些事情,而不是想再次显示图像。但是在用户关闭显示图像的页面后,我希望图像自动从我的服务器中删除。

我正在考虑制作一个临时文件,但据我所知,这些文件只有在文件关闭后才会被删除。但是因为我必须先用烧瓶返回模板,所以我不能真正关闭它,对吗?解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: python html image flask


    【解决方案1】:

    用户收到文件后,您可以安全地删除它,它仍会在他们的浏览器中。由于从函数返回后无法删除,所以必须先用变量将其加载到内存中,然后删除文件,然后返回已加载的图像。这个例子就是这样做的:

    from flask import Flask, send_file
    import io
    import os
    app = Flask(__name__)
    
    @app.route("/image-route.jpg")  # Change this to match your route
    def send_my_image():
        image_in_memory = None  # Create variable so it has the correct scope
        # Open file and load it into a BytesIO object which behaves just as if it was a file
        with open('my-file-location.jpg', 'rb') as f:
            image_in_memory = io.BytesIO(f.read())
        # Since we have the image in memory, we can safely remove it
        os.remove('my-file-location.jpg')  
        # Finally, return our BytesIO object as if it was a file
        return send_file(image_in_memory, attachment_filename='my-file.jpg')
    
    app.run()
    

    【讨论】:

    • 但是在 return 声明之后我怎么做呢?因为那时我将所有变量等发送到 html 页面,因此我的函数停止并且我无法从 html 页面中删除它。我尝试添加打开 pil 图像对象,但这不起作用..
    • 啊,是的,行得通!但是从这里开始,在我的一个模板中实际显示此图像的最佳方式是什么?因为我还需要在原始图像旁边提供一些额外的信息。
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2020-04-26
    • 2019-10-04
    • 2015-03-06
    • 2017-02-12
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多