如何从直链转存大文件至Google Drive?自定义脚本方案可行吗?
无需本地中转,将直链文件转存到Google Drive的方案
一、公开直链的直接转存方法
完全可以实现云端直转,不需要本地存储文件,核心是利用云端环境或工具完成数据流的中转:
- Google Apps Script 实现:借助Google云端脚本环境,调用Drive API直接抓取直链数据流并写入Drive,全程无本地参与。示例代码:
function saveDirectLinkToDrive() { const fileUrl = "你的公开直链地址"; const targetFolderId = "Google Drive目标文件夹ID"; const response = UrlFetchApp.fetch(fileUrl, {muteHttpExceptions: true}); if (response.getResponseCode() !== 200) { throw new Error("文件抓取失败:" + response.getResponseCode()); } const fileBlob = response.getBlob(); DriveApp.getFolderById(targetFolderId).createFile(fileBlob); }
- rclone 命令行工具:配置Google Drive为远程存储后,用
copyurl命令直接完成云端复制,可在本地终端或云端服务器(如Google Cloud Shell、VPS)执行,本地仅运行命令不存储文件:
rclone copyurl "你的公开直链地址" gdrive:目标路径 --progress
二、触发式下载直链的转存方案
这类需要点击或特定请求触发的动态直链,通过编程模拟请求逻辑即可实现转存,完全可行:
- Python 脚本示例:用
requests模拟浏览器请求获取真实下载流,再通过pydrive2直接上传到Drive:
import requests from pydrive2.auth import GoogleAuth from pydrive2.drive import GoogleDrive # 模拟请求获取文件流(需根据目标站调整请求头/参数) def get_download_stream(trigger_url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 处理跳转或触发逻辑,获取真实数据流 response = requests.get(trigger_url, headers=headers, allow_redirects=True, stream=True) if response.status_code == 200: return response.raw raise Exception(f"请求失败,状态码:{response.status_code}") # 授权并上传到Google Drive gauth = GoogleAuth() gauth.LocalWebserverAuth() # 首次运行需完成浏览器授权 drive = GoogleDrive(gauth) file_stream = get_download_stream("你的触发式下载链接") new_file = drive.CreateFile({"title": "自定义文件名.ext", "parents": [{"id": "目标文件夹ID"}]}) new_file.SetContentString(file_stream.read()) new_file.Upload()
- 关键步骤:先用浏览器开发者工具(Network面板)抓包,分析目标站的下载触发逻辑(如是否需要Cookie、特定请求参数),再在脚本中模拟对应请求。
三、注意事项
- 文件大小限制:Google Apps Script的UrlFetchApp单次请求最大支持100MB,更大文件建议用rclone或云端服务器运行脚本。
- 配额与权限:确保Google Drive有足够存储空间,API调用不要超出每日配额,授权时需赋予对应文件操作权限。
- 反爬应对:部分网站会拦截非浏览器请求,需调整请求头、添加代理,必要时处理验证码逻辑。
内容的提问来源于stack exchange,提问作者phukon
相关产品推荐
相关产品推荐

