如何在python中获取从URL获取图像文件的大小(在决定保存之前)

如何在python中获取从URL获取图像文件的大小(在决定保存之前),python,Python,在保存之前,我想检查filestreampath中URL图像的文件大小,如何执行此操作 另外,我不想依赖内容长度头,我想将其提取到文件流中,检查大小,然后保存。您可以向服务器询问内容长度信息。使用urllib2(我希望您的python中可以使用它): 您可以向服务器询问内容长度信息。使用urllib2(我希望您的python中可以使用它): 尝试导入urlib.request req = urllib2.urlopen(url) meta = req,info() length_text = m

在保存之前,我想检查filestream
path
中URL图像的文件大小,如何执行此操作


另外,我不想依赖内容长度头,我想将其提取到文件流中,检查大小,然后保存。您可以向服务器询问内容长度信息。使用
urllib2
(我希望您的python中可以使用它):


您可以向服务器询问内容长度信息。使用
urllib2
(我希望您的python中可以使用它):


尝试导入
urlib.request

req = urllib2.urlopen(url)
meta = req,info()
length_text = meta.getparam("Content-Length")
try:
      length = int(length_text)
except:
      # length unknown, you may need to read
      length = -1

尝试导入
urlib.request

req = urllib2.urlopen(url)
meta = req,info()
length_text = meta.getparam("Content-Length")
try:
      length = int(length_text)
except:
      # length unknown, you may need to read
      length = -1

您可以获得
io.BytesIO()
对象的大小,方法与获取任何文件对象的大小相同:查找到末尾并询问文件位置:

import urllib.request, io
url = 'http://www.elsecarrailway.co.uk/images/Events/TeddyBear-3.jpg'
path = urllib.request.urlopen(url)
meta = path.info()

>>>meta.get(name="Content-Length")
'269898' # ie  269kb
但是,在将其插入内存中的文件对象之前,您也可以轻松地获取刚才读取的bytestring的
len()

path = io.BytesIO(urllib.request.urlopen(url).read())
path.seek(0, 2)  # 0 bytes from the end
size = path.tell()
请注意,这意味着您的图像已加载到内存中。不能使用此选项来防止加载过大的图像对象。对于这一点,使用
内容长度
标题是唯一的选择


如果服务器使用分块传输编码来促进流式传输(因此前面没有设置内容长度),您可以使用循环限制读取的数据量。

您可以通过与任何文件对象相同的方式获得
io.BytesIO()
对象的大小:通过查找结尾并询问文件位置:

import urllib.request, io
url = 'http://www.elsecarrailway.co.uk/images/Events/TeddyBear-3.jpg'
path = urllib.request.urlopen(url)
meta = path.info()

>>>meta.get(name="Content-Length")
'269898' # ie  269kb
但是,在将其插入内存中的文件对象之前,您也可以轻松地获取刚才读取的bytestring的
len()

path = io.BytesIO(urllib.request.urlopen(url).read())
path.seek(0, 2)  # 0 bytes from the end
size = path.tell()
请注意,这意味着您的图像已加载到内存中。不能使用此选项来防止加载过大的图像对象。对于这一点,使用
内容长度
标题是唯一的选择


如果服务器使用分块传输编码来促进流式传输(因此没有预先设置内容长度),则可以使用循环限制读取的数据量。

可能重复:为什么不需要依赖内容长度标题?您可以使用“查找到底”和
fobj.tell()
检查
BytesIO
对象的大小,方法与检查任何打开的文件对象的方法相同。但是如果您使用内容长度标题,您可以避免必须先将整个图像读入内存。可能的重复:为什么不需要依赖内容长度标题?您可以使用“查找到底”和
fobj.tell()
检查
BytesIO
对象的大小,方法与检查任何打开的文件对象的方法相同。但是如果你使用内容长度标题,你可以避免先将整个图像读入内存。但是现在你的答案在功能上与llogiq没有区别,直接违背OP的要求。但是现在你的答案在功能上与llogiq没有区别,直接违背OP的要求。