我想要得到上传图片的大小,以控制它是否大于最大文件上传限制。我试过这个:
@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']?
发布于 2013-04-03 16:38:15
这里有几件事需要注意- 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非常大,显然要小心不要将太多数据读入内存
发布于 2014-05-12 12:25:47
如果您不想首先将文件保存到磁盘,请使用以下代码,这适用于内存流
import os
file = request.files['file']
file.seek(0, os.SEEK_END)
file_length = file.tell()否则,这样会更好。
request.files['file'].save('/tmp/file')
file_length = os.stat('/tmp/file').st_size发布于 2013-04-03 03:51:41
设置最大文件上传限制的正确方法是通过MAX_CONTENT_LENGTH应用程序配置。例如,如果您想要设置16MB的上传限制,您可以对您的应用程序配置执行以下操作:
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024如果上传的文件太大,Flask会自动返回状态代码413 Request Entity too large -这应该在客户端处理。
https://stackoverflow.com/questions/15772975
复制相似问题