无服务器打造私有无限量网盘

无服务器打造私有无限量网盘
雨天狂奔无服务器打造私有无限量网盘
前言
首先感谢 0-RTT/telegraph 大佬的项目给予的启发。以此为灵感,我重写了该项目,增加了文件预览(部分格式)、文件搜索、分享、下载功能,对 CF 的 D1 数据表也增加了更多文件信息
项目特点
该项目是一个基于 Cloudflare Worker 环境和 telegram 频道存储功能的文件上传、分享、下载、搜索、在线预览系统。支持用户认证,上传的文件将通过 Telegram 机器人发送到指定的频道聊天中。
已知问题:
- 由于TG的限制,20M以上的文件虽然可以上传,但无法返回直链,导致无法预览
- Worker免费计划也有每个请求的响应时间不能超过10秒的限制
- 因此修改代码逻辑:前端禁止上传超过20M的文件,超过会弹出错误信息
功能
- 用户认证:可选是否开启身份认证,默认开启
ENABLE_AUTH = true
,如设置为false
,则跳过登录。 - 前端登录:
ENABLE_AUTH = true
的情况下,需要输入用户名密码
登录,cookie
有效期为默认为7
天。 - 文件上传:用户可以通过
拖拽
或点击
选择文件进行上传,支持多文件
上传,支持显示上传进度条
百分比。 - 文件管理:管理员可以查看已上传的文件列表,支持
在线预览
(图片和视频格式)、分享
、下载
和删除
文件。- 分享:会生成一个二维码,二维码框内点击 “ 复制链接 “ 按钮也可复制 url 链接
- 下载:直接调用浏览器下载功能
- 删除:会同步从 tg 频道中删除上传的文件
- 文件搜索:用户可以根据
文件名
搜索已上传的文件。 - 背景图更新:系统会定期从
Bing
获取背景图,提升用户体验。
2025-02-09 更新
- 解决
webp
图片上传失败的问题 - 文件管理页面删除文件时,可以同步从
tg频道
删除消息 - 文件管理页面点击分享可生成
二维码
- 注意:本次更新需要重写
D1数据表
,先删除在 D1 中生成的表文件,重新访问项目主页以生成新的表文件
部署方法
粘贴代码:
- 项目地址:https://github.com/yutian81/CF-tgfile
- 新建一个 worker,复制
_worker.js
的内容粘贴到项目中并部署
绑定数据库(必须):
- 创建一个 D1 数据库,数据库名随意,例如:
tgflie
- 在 worker 项目的设置中绑定刚刚创建的数据库,变量名:
DATABASE
- 创建一个 D1 数据库,数据库名随意,例如:
配置环境变量:
变量名 变量值 是否必须 备注 DOMAIN 你项目绑定的域名 √ USERNAME 登录用户名 × PASSWORD 登录密码 × COOKIE 7 × cookie 有效期,默认为 7 天 ENABLE_AUTH true / false × 默认为 true,如果设为 false,则不启用登录 TG_BOT_TOKEN TG 机器人 token √ 获取方式请自行谷歌,下同 TG_CHAT_ID TG 频道 ID √ 是频道 ID,不是机器人 ID,格式为 -10*****062333
MAX_SIZE_MB 20 × 上传的单文件大小上限,tg 最大只能上传 20m
以下问题需要你自行搜索或询问 AI 解决
- 在 CF 中创建 D1 数据库,并绑定到 worker 项目的 DATABASE 变量
- 获取 TG_CHAT_ID,是频道 ID,不是用户 ID,需要你创建一个频道,可以是私有的
- 获取 TG_BOT_TOKEN,机器人的 token,该机器人必须是你频道的管理员,具有发送和删除文件的权限
访问应用
打开浏览器,访问 http://你绑定的域名
,首次登录会要求输入用户名和密码,然后进行文件上传和管理。二次登录会跳过登录环节,直接进入上传页面,cookie 有效期为 7 天,超过 7 天会要求重新登录。你也可以在环境变量中设置 COOKIE 变量改变有效期
前端展示
- 登录——首次登录需要输入用户名密码
- 上传文件——支持多文件,支持拖拽上传
- 文件管理——卡片式文件列表,支持预览和文件名搜索
- 文件分享——支持生成二维码分享
- 视频预览——支持 20M 以内视频(MP4 格式)的在线预览和播放
Plan 计划
- 增加更多文件格式的在线预览
- 文件管理页面增加分页功能
#cloudflare #TG #网盘 #图床
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果