使用python flask

时间:2016-08-16 10:31:23

标签: python csv flask large-files

要求:使用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)

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您也可以查看Flask-Upload extension

还有另外一篇与此类似的帖子:Large file upload in Flask

除此之外,你的问题可能是某个地方的超时。堆栈的其余部分是什么样的? Apache的? Nginx和Gunicorn?您是收到Connection reset错误,Connection timed out错误还是仅挂起?

如果您使用的是Nginx,请尝试将proxy_read_timeout设置为足够高的值,以便完成上传。 Apache也可能有一个默认设置,如果你正在使用它,会导致麻烦。如果不了解更多关于堆栈的信息以及您获得的错误以及日志显示的内容,很难说清楚。