如何通过Google Drive URL在下载前获取远程文件大小?
当然可以!针对你给出的这种带export=download参数的Google Drive直链,我们完全可以在下载前获取文件大小,不用浪费带宽下载整个文件。下面分享几种实用的方法:
方法1:用curl发送HEAD请求(快速且无需编程)
这是最简便的方式,通过发送HEAD请求只获取响应头信息,不会下载文件内容:
# 发送HEAD请求并跟随重定向 curl -IL "https://drive.google.com/uc?export=download&id=54fs54dg45f1f112f2"
在返回的响应头里,找到Content-Length字段,它的值就是文件的字节数。比如:
Content-Length: 123456789
你可以把字节数转换成更易读的单位(比如除以1024*1024得到MB)。
⚠️ 注意:如果Google Drive返回了重定向(比如302状态码),一定要加-L参数跟随跳转,否则拿到的可能是跳转页面的大小,不是目标文件的。
方法2:处理需要人机验证的大文件
如果文件较大(通常超过100MB),Google Drive会要求“确认你不是机器人”,这时候直接发HEAD请求拿不到Content-Length。我们可以先获取验证token,再带token请求:
# 第一步:获取确认token CONFIRM=$(curl -s "https://drive.google.com/uc?export=download&id=54fs54dg45f1f112f2" | grep -o 'confirm=[^&]*' | cut -d'=' -f2) # 第二步:带token发送HEAD请求 curl -IL "https://drive.google.com/uc?export=download&id=54fs54dg45f1f112f2&confirm=$CONFIRM"
这时候就能在响应头里看到真实的文件大小了。
方法3:用Python编程实现(适合自动化场景)
如果你需要在脚本里自动获取文件大小,可以用requests库来处理:
import requests def get_google_drive_file_size(url): # 先尝试直接发HEAD请求 response = requests.head(url, allow_redirects=True) if 'Content-Length' in response.headers: return int(response.headers['Content-Length']) # 处理需要验证的情况 session = requests.Session() initial_resp = session.get(url, allow_redirects=False) # 从cookie中提取验证token if 'confirm' in initial_resp.cookies: confirm_token = initial_resp.cookies['confirm'] url_with_confirm = f"{url}&confirm={confirm_token}" resp = session.head(url_with_confirm, allow_redirects=True) if 'Content-Length' in resp.headers: return int(resp.headers['Content-Length']) # 无法获取的情况 return None # 使用示例 file_url = "https://drive.google.com/uc?export=download&id=54fs54dg45f1f112f2" size_bytes = get_google_drive_file_size(file_url) if size_bytes: print(f"文件大小:{size_bytes} 字节(约{size_bytes/1024/1024:.2f} MB)") else: print("无法获取文件大小,可能文件需要登录权限或链接已失效")
注意事项
- 如果文件是仅限特定用户访问的(比如未公开共享),上述方法都需要你先在请求中带上有效的登录cookie,否则无法获取真实大小。
- 若链接无效或文件已被删除,响应头里不会有
Content-Length字段,需要做好异常处理。 Content-Length返回的是字节数,换算单位时:1MB = 10241024字节,1GB = 10241024*1024字节。
内容的提问来源于stack exchange,提问作者tagueule
相关产品推荐
相关产品推荐

