gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:49:15 26 4
gpt4 key购买 nike

我想获取上传图片的大小来控制它是否大于最大文件上传限制。我试过这个:

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

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

它打印了 0。我究竟做错了什么?我应该从它的临时路径中找到这个图像的大小吗? Python中有没有类似PHP的 $_FILES['foo']['size'] 的东西?

最佳答案

这里有几件事情需要注意 - content_length 属性将是浏览器报告的文件上传的内容长度,但不幸的是,许多浏览器不发送此内容,如 docs 中所述和 source .

至于您的 TypeError,接下来要注意的是,小于 500KB 的文件上传会以 StringIO object 的形式存储在内存中。 ,而不是假脱机到磁盘(再次查看那些文档),因此您的 stat 调用将失败。

MAX_CONTENT_LENGTH 是拒绝大于您想要的文件上传的正确方法,如果您需要它,确定数据长度的唯一可靠方法是在您处理上传后找出它 - 要么统计.save()d 后的文件:

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

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

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

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

关于python - Flask:获取 request.files 对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com