首页 > 解决方案 > 使用 send_file 返回多个图像

问题描述

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

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 链接。然而,我没有实现它,因为这只是为了概念验证应用程序。

标签: pythonflaskflask-restful

解决方案


简短的回答是,您可以考虑将文件压缩在一起以进行传输。

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

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


推荐阅读