使用 send_file 返回多个图像
returning multiple images with send_file
我正在使用 Python 库 flask-restful
和 flask
创建 RESTful API。在 return 只有一张图像的功能的情况下,我已经设法使它完美地工作。比如下面的函数例子
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')
但是,我的问题在于我必须 return 将多个文件合而为一 return 的功能。 flask
中是否有执行此操作的功能?或者有没有更好的方法来完成这个任务。
更新:
最终使用 zipfile
库将文件压缩在一起,并 return 它们在响应中的单个文件中。正如其他人指出的那样,由于它是单线程的,所以完全使用 flask 到 return 文件是次优的。更好的实现方式是将文件上传到文件共享服务,然后 return a URL link 到文件。然而,我没有实现它,因为这只是为了概念应用程序的证明。
简短的回答是,您可以查看 zipping the files together 进行转移。
但长话短说,虽然可以使用 Flask 发送文件,但它通常不是完成这项工作的正确工具。主要问题是 Flask 是 single-threaded,因此在将文件传输给一个用户时将无法处理其他请求。虽然您可以通过使用 gunicorn 或其他生产服务器来增加同时连接的数量,但您的目标通常应该是仅使用 Flask 来构建和提供页面。
相反,您应该将要传输的文件放在某种云存储上,然后将您的用户链接发送给它们。 S3 is popular.
我正在使用 Python 库 flask-restful
和 flask
创建 RESTful API。在 return 只有一张图像的功能的情况下,我已经设法使它完美地工作。比如下面的函数例子
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')
但是,我的问题在于我必须 return 将多个文件合而为一 return 的功能。 flask
中是否有执行此操作的功能?或者有没有更好的方法来完成这个任务。
更新:
最终使用 zipfile
库将文件压缩在一起,并 return 它们在响应中的单个文件中。正如其他人指出的那样,由于它是单线程的,所以完全使用 flask 到 return 文件是次优的。更好的实现方式是将文件上传到文件共享服务,然后 return a URL link 到文件。然而,我没有实现它,因为这只是为了概念应用程序的证明。
简短的回答是,您可以查看 zipping the files together 进行转移。
但长话短说,虽然可以使用 Flask 发送文件,但它通常不是完成这项工作的正确工具。主要问题是 Flask 是 single-threaded,因此在将文件传输给一个用户时将无法处理其他请求。虽然您可以通过使用 gunicorn 或其他生产服务器来增加同时连接的数量,但您的目标通常应该是仅使用 Flask 来构建和提供页面。
相反,您应该将要传输的文件放在某种云存储上,然后将您的用户链接发送给它们。 S3 is popular.