如何用Python自动化获取无后缀云存储图片的文件大小?
无需下载即可获取图片文件大小的Python实现方案
当然可行!你可以通过发送HTTP HEAD请求来实现这个需求——这种请求只会返回服务器的响应头信息,不会传输图片的实际内容,完美避免了下载整个文件的开销。
核心原理
HTTP响应头里的Content-Length字段会直接告诉我们资源的字节大小,只要服务器支持HEAD请求并正确返回这个字段,就能直接拿到图片的大小。不过要注意两种特殊情况:
- 部分服务器可能禁用HEAD请求,这时可以退而求其次发送GET请求,但只读取响应头(不下载正文)
- 如果服务器使用分块传输编码(响应头包含
Transfer-Encoding: chunked),Content-Length字段会不存在,这种情况就没办法绕开下载了,但大多数图片托管站点不会这么处理图片资源
Python代码实现
下面是两种常用库的实现示例:
使用requests库(推荐,代码更简洁)
import requests def get_file_size(url): try: # 发送HEAD请求,允许自动跟随重定向 response = requests.head(url, allow_redirects=True) response.raise_for_status() # 检查请求是否成功(比如404、500错误) # 从响应头中提取文件大小 if 'Content-Length' in response.headers: return int(response.headers['Content-Length']) else: return "无法获取文件大小:服务器未返回Content-Length字段" except requests.exceptions.RequestException as e: return f"请求失败:{str(e)}" # 测试调用 image_url = "http://someimagehostingsite.net/somefolder/some_random_url_with_timestamp" file_size = get_file_size(image_url) print(f"图片大小:{file_size} 字节" if isinstance(file_size, int) else file_size)
使用标准库urllib(无需额外安装依赖)
from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError def get_file_size(url): try: # 构造HEAD请求 req = Request(url, method='HEAD') with urlopen(req) as response: # 读取响应头中的Content-Length if 'Content-Length' in response.headers: return int(response.headers['Content-Length']) else: return "无法获取文件大小:服务器未返回Content-Length字段" except (HTTPError, URLError) as e: return f"请求失败:{str(e)}" # 测试调用 image_url = "http://someimagehostingsite.net/somefolder/some_random_url_with_timestamp" file_size = get_file_size(image_url) print(f"图片大小:{file_size} 字节" if isinstance(file_size, int) else file_size)
额外提示
- 务必处理重定向:图片URL可能会跳转至真实资源地址,所以要开启自动跟随重定向的设置
- 异常处理不能少:要覆盖网络错误、服务器错误、无效URL等各种场景
- 如果遇到服务器不支持HEAD请求的情况,可以改用GET请求但开启流模式(
requests.get(url, stream=True)),只读取响应头就停止,同样不会下载完整图片
内容的提问来源于stack exchange,提问作者GCarl
相关产品推荐
相关产品推荐

