我在 AWS Api Gateway/Lambda 环境中使用 Flask(感谢 Zappa),但响应大小有限制,因此 Flasksend_file
在这种情况下是不够的。
有没有办法可以流式传输/多部分(不确定这些是否是正确的术语)类似文件的对象作为 Flask 中的响应?我无法在 AWS 无服务器环境中发送超过5mb(6mb?)的请求正文。
当前代码(下载后删除对象的简单 S3 代理):
@app.route('/polling/<key>')
def polling(key):
obj = BytesIO()
try:
s3.download_fileobj('carusoapi', key, obj)
s3.delete_object(Bucket='carusoapi', Key=key)
return send_file(obj, as_attachment=True, attachment_filename=key)
except Exception:
return 'File not ready yet', 204
我在这里看到了一些示例,但不明白如何应用它们,或者这甚至是我正在寻找的。
我还注意到 boto3 S3 模块具有回调等选项,您可以在此处指定块download_fileobj
大小,但同样,我不明白如何将其应用于 Flask 响应。
我知道一种解决此问题的方法,即向客户端发送签名的下载链接以下载该项目,但随后我必须在客户端中实现以删除该文件。