gpt4 book ai didi

python - 带大文件的flask make_response

转载 作者:行者123 更新时间:2023-12-03 13:57:14 25 4
gpt4 key购买 nike

因此,我对文件I / O和内存限制等一无所知,并且我很难让我的Web应用程序成功地将大文件下载提供给带有flask make_response的Web浏览器。以下代码适用于较小的文件(<〜1GB),但是进入较大文件时会出现MemoryError异常:

raw_bytes = ""
with open(file_path, 'rb') as r:
for line in r:
raw_bytes = raw_bytes + line
response = make_response(raw_bytes)
response.headers['Content-Type'] = "application/octet-stream"
response.headers['Content-Disposition'] = "inline; filename=" + file_name
return response


我假设将超过2 GB的二进制数据粘贴到字符串中可能是一个很大的禁忌,但是我不知道替代这些文件下载的方法。如果有人可以用大块的[?]或缓冲的方法来使我正确地进行文件下载,或者只是将我指向一些中级资源以促进对这些内容的更深入了解,我将不胜感激。谢谢!

最佳答案

请参阅Streaming Content上的文档。基本上,您编写了一个生成数据块的函数,并将该生成器传递给响应,而不是一次传递整个响应。 Flask和您的Web服务器完成其余工作。

from flask import stream_with_context, Response

@app.route('/stream_data')
def stream_data():
def generate():
# create and return your data in small parts here
for i in xrange(10000):
yield str(i)

return Response(stream_with_context(generate()))


如果文件是静态的,则可以改用 send_from_directory()。该文档建议您使用nginx或其他支持X-SendFile的服务器,以便高效地读取和发送数据。

关于python - 带大文件的flask make_response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24318084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com