You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:29:21