- 所有文章/
一个好用的 Telegram 文件批量上传/下载工具
本文目录
前言 #
平时为了满足自己的“松鼠癖”在服务器上部署了一些文件下载/同步服务如:Aria2 Pro、qBittorrent Enhanced、Resilio Sync 等。服务器/VPS 上远程下载好了,如果想要把文件分享给 Telegram 联系人,又不想不通过服务器直链分享文件,就需要手动下载文件再上传到 Telegram;另一种情况就是 Telegram 上收的一些文件需要上传到 OneDrive 进行归档,这样在平时的使用中就会增加不少时间和流量成本。
不久前我发现一个 Python 写的开源项目 telegram-upload 可以很方便的在服务器/VPS 和 Telegram 之间进行文件的上传和下载操作(上传 OneDrive 下回再讲)
特性 #
telegram-upload 使用个人 Telegram 账户上传和下载文件,单个文件最大支持 2GB(Telegram Bot 限制 50MB)| 文档(英文)
- 上传多个文件
- 下载文件
- 上传视频添加缩略图信息(需要 ffmpeg)
- 上传/下载完成后删除本地/远程文件
安装 #
安装 Python 和 Pip #
服务器需要 安装 Python,下面我将以 Debian 10 下 Python3 安装 telegram-upload 为例,其他操作系统详见 Python 安装指南
Tips: Python2 已经过时,建议安装使用 Python3
# Debian 刷新软件源
sudo apt-get update
# 安装 Python3
sudo apt-get install python3
# 安装 Pip3
sudo apt-get install python3-pip
# 安装完成后验证一下版本
python3 -V
pip3 -V
# 类似下面输出就代表没问题了
root@debian:~# python3 -V
Python 3.7.3
root@debian:~# pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
安装 ffmpeg(可选) #
如果你需要上传视频文件的话,需要确保安装 ffmpeg,否则会导致上传的视频无法在线播放或者显示缩略图
# 对于 Debian/Ubuntu,使用下面命令安装 ffmpeg
sudo apt-get update && sudo apt-get install ffmpeg
# 检查 ffmpeg 安装
ffmpeg -version
安装 telegram-upload #
安装稳定版
稳定版是推荐的版本,默认情况下会默认安装最新的稳定版 telegram-upload
sudo pip3 install -U telegram-upload
指定版本号
使用以下命令从 Pypi 安装已发布的其他版本,<version>
是具体版本号
pip install telegram-upload==<version>
从 GitHub 仓库安装
已经安装有 Git 的情况安装,<branch>
是 GitHub 分支名
pip install git+https://github.com/Nekmo/telegram-upload.git@<branch>#egg=telegram_upload
系统没有安装 Git 的情况下安装,<branch>
是 GitHub 分支名
pip install https://github.com/Nekmo/telegram-upload/archive/<branch>.zip
配置 #
注册 Telegram App #
用 Telegram 注册的手机号登录 My Telegram,登录完成后应该会看到如下几个菜单
Your Telegram Core
进入 API development tools,可以看到下图的界面
App api_id
和 App api_hash
是等下需要的应用 ID 和应用机密,复制保留备用;App title
和 Short name
可以随便填,拉到页面底部 Save changes
保存设置
经过和 xiaoxinhuozhu 同学的验证,如果此步骤注册 API 应用过程中出现莫名 Error,很可能是因为国内 +86 手机号被 Telegram 限制,建议使用其他国家的手机号,目前使用 Google Voice 美国 VoIP 手机号没问题
请注意,此页面的应用 ID、机密和密钥等信息非常非常非常重要,千万不要泄露!
生成配置文件 #
随便准备一个小文件,上传到自己 Telegram 的收藏夹:
# telegram-upload [文件路径]
telegram-upload /telegram/[ATFMaker]白修女.zip
第一次登录会提示输入 Telegram 手机号
其他 Telegram 设备收到的 验证码
注意手机号需要带国际电话区号,美国/加拿大是 +1…
Please enter your phone: +1**********
Please enter the code you received: *****
Signed in successfully as [Telegram Nick Name]
文件会开始上传,我们可以再终端里看到上传进度,上传完成后,你应该能看到文件在你的 Telegram 收藏夹了 🤠
xxxxxuser@b1s:~telegram-upload /telegram/[ATFMaker]白修女.zip
Uploading "[ATFMaker]白修女.zip" [####################################] 100%
默认情况下我们生成的配置文件路径为 /root/.config/telegram-upload.json
,该文件包含你的Telegram App 登录的机密信息,请妥善保存,之后的登录就不需要在输入机密信息了
使用 #
现在我们的服务器上 telegram-upload 安装和配置都没问题了,下面根据 官方文档 介绍一下它的用法,这里主要分为 Telegram 上传和 Telegram 下载两部分
Telegram 上传 #
默认情况下,使用 Telegram 个人账户上传一个或多个文件到你的 收藏夹
,单个文件最大限制 2GB,用法:
telegram-upload [选项] [文件路径]
[选项]
--to <to>
电话号码
、用户名
、邀请连结
或收藏夹(保存的消息)
,默认为收藏夹
--config <config>
要使用的 Telegram App 配置文件路径,默认为
/root/.config/telegram-upload.json
-d
,--delete-on-success
上传成功后删除本地文件
--print-file-id
上传完成后打印上传文件的 id
--force-file
强制作为文件发送,文件名将被保留,但预览将不可用
-f
,--forward
<forward>
将文件转发给聊天(昵称/ ID)或用户(用户名/手机号码/ID),此选项可以多次使用(发送给多个频道/群组/联系人)
--directories
<directories>
定义如何处理目录,默认情况下不接受目录,并且会出现错误提示(fail),可选递归目录(recursive)
选项:
fail
|recursive
--large-files
<large_files>
定义如何处理 Telegram 不支持的大文件,默认情况下,不接受大文件,并且会出现错误提示(fail),可选大文件切割上传(split)
选项:
fail
|split
--caption
<caption>
更改文件描述。默认为文件名。
--no-thumbnail
禁用生成缩略图,对于一些已知的文件格式(如图片、视频等),Telegram 可能仍会生成缩略图或显示预览
注意:此参数与参数互斥:[thumbnail-file]
--thumbnail-file
<thumbnail_file>
用于指定上传文件的预览文件(缩略图)的路径
注意:此参数与参数互斥:[no-thumbnail]
-p
,--proxy
<proxy>
对于一些无法连接 Telegram(如中国)使用代理,支持
http
、sock4
、sock5
、mtproxy
等代理类型,具体使用见后文-a
,--album
将视频或照片作为相册发送
Telegram 下载 #
下载聊天中的所有最新消息,默认情况下从收藏夹(保存的消息)
下载,建议将要下载的文件转发到 收藏夹(保存的消息)
并使用参数 --delete-on-success
,下载完成后转发的消息将自动从聊天中删除,例如下载队列,用法:
telegram-upload [选项]
-f
,--from
<from_>
手机号码、用户名、频道/群组 ID 或者 收藏夹(保存的消息),默认为
收藏夹
--config
<config>
要使用的 Telegram App 配置文件路径,默认为
/root/.config/telegram-upload.json
-d
,--delete-on-success
下载成功后删除电报信息,用于创建下载队列
-p
,--proxy
<proxy>
对于一些无法连接 Telegram(如中国)使用代理,支持
http
、sock4
、sock5
、mtproxy
等代理类型,具体使用见后文
代理 #
mtproxy
和 sock4
代理可直接在 -p
或者 --proxy
参数后使用,对于 http
或 sock5
代理需要安装 pysocks
pip install pysocks
mtproxy 代理
mtproxy://<secret>@<address>:<port>
其他代理
<protocol>://[<username>:<passwd>@]<address>:<port>
比如
# http 类型
http://username:passwd@1.2.3.4:1987
# socks4 类型
socks4://username:passwd@1.2.3.4:1980
# socks5 类型
socks5://username:passwd@1.2.3.4:1980
上传文件的过程指定代理使用参数 -p
或者 --proxy
加上代理格式
telegram-upload image1.jpg --proxy mtproxy://secret@proxy.my.site:443
telegram-upload image2.jpg --proxy http://username:passwd@1.2.3.4:1987
telegram-upload image3.jpg --proxy socks4://username:passwd@1.2.3.4:1980
telegram-upload image4.jpg --proxy socks5://username:passwd@1.2.3.4:1980
环境变量
除了设置代理参数你还可以使用环境变量,就可以不用每次都指定代理了,可以在终端定义环境变量以定义一下代理之一:TELEGRAM_UPLOAD_PROXY
、HTTPS_PROXY
或 HTTP_PROXY
# 导入环境变量代理
export HTTPS_PROXY=socks5://username:passwd@1.2.3.4:1980
# 然后可以直接上传文件无需再设置代理
telegram-upload image.jpg
# 如果需要禁用代理
export TELEGRAM_UPLOAD_PROXY=
export HTTPS_PROXY=
export HTTP_PROXY=
注意:代理参数 -p
或者 --proxy
比环境变量指定的代理拥有更高的优先级,环境变量 TELEGRAM_UPLOAD_PROXY
优先级高于 HTTPS_PROXY
并且它优先于 HTTP_PROXY
防止任务中断 #
telegram-upload 在终端里执行,如果终端断开,其进程就可能中断,因此在 Linux 下我们需要使用 screen 命令来让进程在后台执行会话
对于 Debian/Ubuntu 安装 screen
sudo apt-get update
sudo apt-get install screen
在安装好 screen 后,可以使用 screen 会话让我们的上传操作在后台进行且不会因为 SSH 断开而终止了
# 新建一个名为 tg 的 screen 会话(注意大小写)
screen -S tg
# 然后在里面执行我们的 telegram-upload 命令,比如:
telegram-upload /telegram/xxx.zip
# 按Ctrl+A,再按"D"键,保留会话在 SSH 断开后继续执行
# 未来需要恢复名为 tg 的会话
screen -r tg
# 任务完成,需要关闭 tg 这个会话
exit