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

烧瓶:获取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。我究竟做错了什么?我应该从它的临时路径中找到该图像的大小吗?有没有类似PHP的$_FILES['foo']['size']Python?


问题答案:

这里需要注意几件事-
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非常大,则不要将太多数据读入内存



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

  • 我正在尝试使用Flask和requests构建一个简单的代理。代码如下: 这可以工作,只是它会丢失ElasticSearch的状态代码。我尝试直接返回(),但失败了 还有其他简单的方法从flask返回吗?

  • 客户端代码: 服务器代码: 问题是我的用户名和密码总是空的。 我还尝试使用: 和 打印内容时,我有: 编辑: 我添加了json。转储和使用请求。获取_json(),它就成功了

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

  • 我发现很难找到有关这方面的资料。会是什么?我如何解决这个问题?有哪些可能的修复方法? UWSGI日志文件 时钟来源:unix检测到CPU核数:4当前工作目录:/home/pi检测到二进制路径:/usr/local/bin/uwsgi!!!没有内部路由支持,重建与pcre支持!!!*警告:您在没有主进程管理器的情况下运行uWSGI进程数限制为7336内存页大小为4096字节检测到最大文件描述符号:6

  • 我正在使用flask-RESTful开发API,并且对Flask的jsonify函数有问题。我正在使用flask-marshmlet进行JSON序列化。下面是一个非常简化的代码片段: 在本地,endpoint将返回具有键“data”和“error”的json;但是,当在Linux服务器上运行时,它会返回一个包含列表和在没有“data”和“error”键的情况下返回的结果。 我已经确定这种不一致是由