【问题标题】:Best way to upload large csv files using python flask使用 python flask 上传大型 csv 文件的最佳方法
【发布时间】:2016-08-18 11:52:53
【问题描述】:

要求:使用flask框架上传文件。上传到服务器后,用户应该能够在 UI 中看到文件。

当前代码:为了满足上述要求,我编写了代码来上传足够大的文件,并且可以正常工作(~30 MB 文件,是的,当然不是那么快)。但是当我尝试上传 (~100 MB) 文件时,它需要的时间太长并且过程永远不会完成。

这就是我目前正在做的事情:

UPLOAD_FOLDER = '/tmp'

    file = request.files['filename']
    description = request.form['desc']

    filename = secure_filename(file.filename)
    try:
        file.save(os.path.join(UPLOAD_FOLDER, filename))
        filepath = os.path.join(UPLOAD_FOLDER, filename)
    except Exception as e:
        return e
    data = None
    try:
        with open(filepath) as file:
            data = file.read()
    except Exception as e:
        log.exception(e)

所以我要做的是首先将文件保存到服务器中的临时位置,然后读取数据并将其放入我们的数据库中。我认为这是我苦苦挣扎的地方,我不确定什么是最好的方法。

我是否应该从用户那里获取输入并返回成功消息(显然用户将无法立即访问该文件)并使用一些将数据放入数据库的后台进程一种排队系统。或者还应该做些什么来优化代码。

【问题讨论】:

    标签: python csv flask large-files


    【解决方案1】:

    在烧瓶方面,确保您将 MAX_CONTENT_LENGTH 配置值设置得足够高:

    app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 100MB limit
    

    您可能还想查看Flask-Upload extension

    还有一个类似的 SO 帖子:Large file upload in Flask

    除此之外,您的问题可能是沿线某处超时。你的堆栈的其余部分是什么样的?阿帕奇? Nginx 和 Gunicorn?您收到Connection reset 错误、Connection timed out 错误还是只是挂起?

    如果您使用的是 Nginx,请尝试将 proxy_read_timeout 设置为足够高的值以完成上传。 Apache 也可能有一个默认设置,如果您使用的是默认设置,则会给您带来麻烦。如果不了解有关您的堆栈的更多信息,以及您遇到的错误是什么以及日志显示的内容,很难说清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多