【问题标题】:can we count the upload filesize before uploading in python-flask我们可以在 python-flask 中上传之前计算上传文件大小吗
【发布时间】:2012-12-22 06:16:17
【问题描述】:

我有一个简单的烧瓶应用程序,我正在上传单个文件,但文件大小小于 5MB
为此,我在我的烧瓶应用程序中定义了
if request.content_length < 5.250e+6: ## setting upload limit to 5MB 测试用例;但这是在上传后验证文件大小;或者可能是我错了。
那么有什么方法可以在上传之前获取文件大小???

这里是 python+GAE 上的 python solution,但我是 python web 框架的新手;我对烧瓶知之甚少
,这个解决方案基于 webapp2,这对我来说非常复杂,而且它在 GAE 上也是如此;那是另一个故事。 所以任何人都可以在flask 中生成它的flask 等价物或任何其他可能的方式吗???

【问题讨论】:

    标签: python flask


    【解决方案1】:

    Flask 能够在上传过程中限制文件大小,请参阅documentation。您只需在配置应用时设置MAX_CONTENT_LENGTH

    【讨论】:

    • 这也是在文件上传后验证文件大小......我希望应该在上传之前。在我的问题中,我提到了一个解决方案(github.com/blueimp/jQuery-File-Upload/tree/master/server/…),但那是使用我不知道的webapp2flask 对我来说是新的;那可以转换成flask??
    • 不,它会在看到 Content-Length 值大于您设置的 MAX_CONTENT_LENGTH 后立即用 413 REQUEST ENTITY TOO LARGE 中止请求。我刚刚用 curl 测试了它,它按预期工作。请注意,对于文件上传,您的表单必须编码为multipart/form-data。如果它丢失了,也许这就是它对你不起作用的原因?
    • 我能用error handler (flask.pocoo.org/docs/api/#flask.Flask.errorhandler) 处理吗?
    • 我的意思是413 错误;我会将错误消息显示为“文件上传限制为 5MB”
    • 遇到了同样的问题。查看 Werkzeug 的 FormParser 代码,看起来 Werkzeug 仅在请求包含 Content-Length 标头时才尊重 MAX_CONTENT_LENGTH 的设置。这意味着,如果您的浏览器使用分块编码,那么它不太可能工作,因为在标头中找不到 Content-Length。
    【解决方案2】:

    这是 Audrius Kažukauskas 答案的扩展版本:


    那么有什么方法可以在上传之前获取文件大小???

    。 根据Flask 用来处理上传文件的werkzeug's documentation,所有浏览器都不能保证在上传之前验证内容大小。只有request 中所有数据的总内容长度才能保证存在。网络浏览器。因此,Flask/werkzeug 只能在文件上传后强制检查。

    但是,为避免您的网络服务器因内存溢出而崩溃,您可以而且应该限制可上传的大小。这是配置变量MAX_CONTENT_LENGTH,您可以在应用程序的配置文件中提及。

    来自Flask doc的示例用法:

    from flask import Flask, Request
    
    app = Flask(__name__)
    app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # for 16MB max-limit.
    

    但是,对于任何严肃的应用程序,您应该考虑使用 Flask 插件Flask-Uploads,它允许更高级的选项,例如将某些文件类型列入白名单和黑名单、基于类型的上传规则、可配置的上传目的地等.

    您可以质疑我为什么要进行额外的扩展
    因为,Flask 是一个微框架。不是一个全能的框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2020-08-14
      • 1970-01-01
      • 2011-05-10
      • 2011-05-14
      • 2011-08-14
      相关资源
      最近更新 更多