【问题标题】:returning multiple images with send_file使用 send_file 返回多个图像
【发布时间】:2019-10-30 09:29:30
【问题描述】:

我正在使用 Python 库 flask-restfulflask 创建一个 RESTful API。在只返回一个图像的函数的情况下,我已经设法让它完美地工作。比如下面的函数示例

class GreyShift(Resource):
    def get(self, path):
        final_path = "Images/" + path
        img_location = "temp/greyshift.jpg"
        cv2.imwrite(img_location, cv2.imread(final_path, 0))
        return send_file(img_location, mimetype='image/jpeg')

但是,我的问题在于我必须一次返回多个文件的函数。 flask 中是否有执行此操作的功能?或者有没有更好的方法来完成这项任务。


更新:

最终使用zipfile 库将文件压缩在一起并在响应中将它们返回到单个文件中。正如其他人所指出的那样,完全使用烧瓶来返回文件是次优的,因为它是单线程的。更好的实现是将文件上传到文件共享服务并返回文件的 URL 链接。然而,我没有实现它,因为这只是用于概念验证应用程序。

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    简短的回答是您可以查看zipping the files together 进行转移。

    但长的答案是,虽然可以使用 Flask 发送文件,但它通常不是适合这项工作的工具。主要问题是 Flask 是单线程的,因此在将文件传输给一个用户时将无法处理其他请求。虽然您可以通过使用 gunicorn 或其他生产服务器来增加同时连接的数量,但您的目标通常应该是仅使用 Flask 来构建和提供页面。

    相反,您应该将要传输的文件放在某种云存储上,然后将您的用户链接发送给它们。 S3 is popular.

    【讨论】:

    • Flask 只有在使用其内部开发服务器运行时才是单线程的。对于生产,您应该在 uWSGI 之类的多线程下运行它。
    • 这是真的。很大程度上取决于 OP 的站点需要运行的规模,以及他愿意支付的价格以确保该规模有足够的服务器线程。例如,Heroku 甚至不允许您在爱好级别拥有超过 1 个 dyno。
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    相关资源
    最近更新 更多