如何使用Python结合MediaIoBaseDownload实现谷歌网盘断点续传?
实现MediaIoBaseDownload断点续传
要实现断点续传,核心是获取已下载文件的大小,并通过HTTP Range 请求头告诉服务器从该位置开始继续传输,同时用ab模式打开本地文件追加写入。具体步骤如下:
计算已下载字节数
先检查本地文件是否存在,获取其大小(即已下载的字节数):import os import io from googleapiclient.http import MediaIoBaseDownload fname = "your_large_file.ext" downloaded_bytes = os.path.getsize(fname) if os.path.exists(fname) else 0设置Range请求头
在创建媒体请求时,添加Range头,指定从已下载的位置开始下载:# 假设你已经初始化了drive_service request = drive_service.files().get_media(fileId="your_file_id") request.headers["Range"] = f"bytes={downloaded_bytes}-"以追加模式打开文件并启动续传
用ab模式打开文件,创建MediaIoBaseDownload对象后正常执行下载循环:fh = io.FileIO(fname, mode='ab') downloader = MediaIoBaseDownload(fh, request) done = False while done is False: status, done = downloader.next_chunk() print(f"Download progress: {int(status.progress() * 100)}%")
注意事项
- 确保目标服务器支持HTTP Range请求(Google Drive API是支持的),如果不支持,该方法会失效,需重新完整下载。
- 若下载中断,再次运行上述代码即可自动从断点处继续。
内容的提问来源于stack exchange,提问作者Joan Venge
相关产品推荐
相关产品推荐

