当前位置: 首页 > 面试题库 >

Flask:获取request.files对象的大小

彭华皓
2023-03-14
问题内容

我想获取上传图片的大小以控制它是否大于最大文件上传限制。我尝试了以下操作:

@app.route("/new/photo",methods=["POST"])
def newPhoto():

    form_photo = request.files['post-photo']
    print form_photo.content_length

它印0有我在哪里做错了?我应该从它的临时路径中找到该图像的大小吗?难道没有像$_FILES['foo']['size']Python 那样的PHP 吗?


问题答案:

这里需要注意几件事-content_length属性将是浏览器报告的文件上载的内容长度,但是不幸的是,正如docs和source中指出的那样,许多浏览器没有发送此内容。

至于你的TypeError,接下来要注意的是,上传小于500KB的文件作为StringIO对象存储在内存中,而不是假脱机到磁盘(再次参见这些文档),因此你的stat调用将失败。

MAX_CONTENT_LENGTH是拒绝大于所需大小的文件上载的正确方法,并且如果需要,确定数据长度的唯一可靠方法是在处理上载后确定数据的长度-在你处理之后再统计文件已经.save()

request.files['file'].save('/tmp/foo')
size = os.stat('/tmp/foo').st_size

或者,如果你不使用磁盘(例如将其存储在数据库中),请计算已读取的字节数:

blob = request.files['file'].read()
size = len(blob)

尽管显然要小心,如果MAX_CONTENT_LENGTH非常大,则不要将太多数据读入内存



 类似资料:
  • 问题内容: 我想控制上传图片的大小,如果它大于最大文件上传限制。我尝试了这个: 它印了。我究竟做错了什么?我应该从它的临时路径中找到该图像的大小吗?有没有类似PHP的Python? 问题答案: 这里需要注意几件事- content_length属性将是浏览器报告的文件上载的内容长度,但是不幸的是,正如docs和source中指出的那样,许多浏览器没有发送此长度。 至于您的TypeError,接下来

  • 问题内容: 我有一个AJAX请求返回的json对象,而我遇到了一些麻烦,因为它一直在返回。只想知道我是否使用正确: 它们都是有效对象,即使它们都返回。 更新: 返回了JSON对象的示例: 问题答案: 你可以用这样的东西

  • 问题内容: 众所周知,Java 5引入了Instrumentation的功能,可轻松获得对象的大小。Android和Dalvik上有这种方法吗? 该软件包在Android上不可用。 问题答案: 对于它的价值,我查看了Dalvik VM源代码,但找不到任何稳定的API来获取对象的大小。如果您想自己看一下,对象的大小存储在中,请参见 dalvik / vm / oo / Object.h 。 但是,有

  • 问题内容: 如何在Python(Flask Framework)中获取JSON对象。以下是我的代码段` 如何在我的Python脚本中获取JSON值 这是我在Python中的代码 问题答案: 在您的JavaScript中,将数据转换为JSON并将设置为: 在flask函数中,使用来获取JSON :

  • 我有一个方法返回Book对象的(不要介意名称,因为它只是一个代码示例)。我想获取Book类中列表的大小: 事情是这样的: