烧瓶大文件下载 [英] Flask large file download

查看:111
本文介绍了烧瓶大文件下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从Flask下载文件时发生内存错误。
文件的大小约为100兆字节。
如何解决?

Memory Error occurs when downloading a file from Flask. The size of the file is about 100 megabytes. How can I fix it?

瓶下载代码

return send_from_directory(s_trash_path, s_zip_name, mimetype='zip', as_attachment=True)

错误代码

[2018-07-21 16:11:22,328] ERROR in app: Exception on /ec-fileupload/download/select [POST]
Traceback (most recent call last):
  File "/home/venv_ec_fileupload/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/venv_ec_fileupload/lib/python3.6/site-packages/flask/app.py", line 1615, in full_dispatch_request
    return self.finalize_request(rv)
  File "/home/venv_ec_fileupload/lib/python3.6/site-packages/flask/app.py", line 1632, in finalize_request
    response = self.process_response(response)
  File "/home/venv_ec_fileupload/lib/python3.6/site-packages/flask/app.py", line 1856, in process_response
    response = handler(response)
  File "./app/__init__.py", line 170, in after_request
    s_data = resp.get_data()
  File "/home/venv_ec_fileupload/lib/python3.6/site-packages/werkzeug/wrappers.py", line 987, in get_data
    rv = b''.join(self.iter_encoded())
MemoryError


推荐答案

由于文件很大且是动态生成的,所以我建议您不要使用 send_from_directory()发送文件。

Since your file is large and dynamically generated, I'd suggest you not to use send_from_directory() to send files.

查看Flask流文档,了解如何流文件(发送小块数据而不是完整文件):> http://flask.pocoo.org/docs/1.0/patterns/streaming/

Check out the flask streaming documentation on how to stream files (sending small chunks of data instead of a full file) : http://flask.pocoo.org/docs/1.0/patterns/streaming/

from flask import Response

@app.route('/large.csv')
def generate_large_csv():
    def generate():
        for row in iter_all_rows():
            yield ','.join(row) + '\n'
    return Response(generate(), mimetype='text/csv')

上面的代码是如何使用flask流csv文件的代码段

The above code is a snippet for how to stream csv files using flask.

但是,如果文件是静态的,则Flask建议使用 nginx 进行部署。

However, if your file is static, then Flask recommends using nginx for deployment.

这篇关于烧瓶大文件下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆