如何使用NodeJS下载最大2GB的Telegram单个视频文件
NodeJS 实现 Telegram 大体积视频单文件下载方案
普通 Bot API 20MB 下载限制是官方 HTTP 接口的内置限制,要突破该限制需直接对接 Telegram 底层 MTProto 协议实现,单文件最高支持 2GB 下载,可满足单视频下载需求。
前置准备
- 注册 Telegram 开发者账号,获取专属
api_id和api_hash,该凭据为开发者访问 MTProto 协议的必要凭证,和普通 Bot Token 权限体系独立 - 安装 MTProto 协议 NodeJS 实现库:
npm install @mtproto/core
核心实现逻辑
- 初始化 MTProto 客户端,可选择个人账号或者 Bot 身份登录,使用 Bot 身份登录时需将对应 Bot 加入目标视频所在的频道/群组并开通访问权限
- 解析传入的 Telegram 视频链接,提取对应的聊天 ID、消息 ID 两个核心参数
- 调用 MTProto 接口查询对应消息的附件信息,获取视频文件的唯一标识、体积、分片信息
- 按 512KB 为单位分片并发下载文件块,全部下载完成后合并写入本地磁盘即可
示例核心代码
const { MTProto } = require('@mtproto/core'); const fs = require('fs'); // 初始化客户端 const client = new MTProto({ api_id: 替换为你的API_ID, api_hash: '替换为你的API_HASH', }); // Bot身份登录逻辑 async function botLogin() { await client.call('auth.importBotAuthorization', { flags: 0, bot_auth_token: '替换为你的BotToken', }); } // 视频下载逻辑 async function downloadVideo(chatId, messageId, savePath) { // 查询目标消息的视频文件信息 const message = await client.call('messages.getMessages', { peer: { _: 'peerChannel', channel_id: chatId }, id: [messageId], }); const video = message.messages[0].media.document; // 分片下载写入 const fileSize = video.size; const chunkSize = 512 * 1024; const writeStream = fs.createWriteStream(savePath); for (let offset = 0; offset < fileSize; offset += chunkSize) { const chunk = await client.call('upload.getFile', { location: { _: 'inputDocumentFileLocation', id: video.id, access_hash: video.access_hash, file_reference: video.file_reference }, offset: offset, limit: chunkSize, }); writeStream.write(chunk.bytes); } writeStream.end(); }
可根据需求自行添加分片下载重试、进度打印、错误捕获等附加逻辑
该方案仅可下载你登录身份有权限访问的公开/私有频道内的视频内容
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

