本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们!免费图片文件托管解决方案系统及源码
开发语言: nodejs
数据库 : 其它
资源语言: 中文
免费图片/文件托管解决方案,支持 Cloudflare Pages + Docker 双模部署,并兼容多种存储后端
![]()
功能特性
无限存储 - 不限数量的图片和文件上传
完全免费 - 托管于 Cloudflare,免费额度内零成本
免费域名 - 使用
*.pages.dev二级域名,也支持自定义域名多存储后端 - 支持 Telegram、Cloudflare R2、S3 兼容存储、Discord、HuggingFace、WebDAV、GitHub
Telegram Webhook 回链 - 机器人在频道/群接收文件后自动回复直链
KV 写入优化 - Telegram 可启用签名直链,显著降低 KV 读写消耗
内容审核 - 可选的图片审核 API,自动屏蔽不良内容
多格式支持 - 图片、视频、音频、文档、压缩包等
在线预览 - 支持图片、视频、音频、文档(pdf、docx、txt)格式的预览
分片上传 - 支持最大 100MB 文件(配合 R2/S3)
访客上传 - 可选的访客上传功能,支持文件大小和每日次数限制
API Token 认证 - 支持
curl/ ShareX / 脚本等程序化上传与调用多种视图 - 网格、列表、瀑布流多种管理界面
存储分类 - 直观区分不同存储后端的文件
双模部署 - 保留 Cloudflare Pages 部署,同时新增 Docker 自托管(
docker compose up -d)动态存储配置管理 - 支持在管理端通过 API 对存储配置进行新增/编辑/删除/测试/设为默认
可插拔设置存储(Docker) - 基础站点设置可使用
sqlite(默认)或 Redis 协议后端(Upstash / Redis / KVrocks)前端路径简化 - 以根路径页面为主流程(
/、/admin.html、/webdav.html)GitHub Actions 镜像构建 - 主分支/Tag 自动构建并推送
api+web镜像
快速部署
前置要求
Cloudflare 账户
Telegram 账户(如使用 Telegram 存储)
Docker + Docker Compose(可选,用于自托管部署)
第一步:获取 Telegram 凭据
获取 Bot Token
向 @BotFather 发送
/newbot按提示创建机器人,获得
BOT_TOKEN
创建频道并添加机器人
创建一个新的 Telegram 频道
将机器人添加为频道管理员
获取 Chat ID
向 @VersaToolsBot 或 @GetTheirIDBot 发送消息获取频道 ID
第二步:部署到 Cloudflare
Fork 本仓库
创建 Pages 项目
进入
Workers 和 Pages→创建应用程序→Pages→连接到 Git选择 Fork 的仓库,点击部署
配置环境变量
进入项目
设置→环境变量添加必需变量:
| 变量名 | 说明 | 必需 |
| :--- | :--- | :---: |
| TG_Bot_Token | Telegram Bot Token | ✅ |
| TG_Chat_ID | Telegram 频道 ID | ✅ |
| BASIC_USER | 管理后台用户名 | 可选 |
| BASIC_PASS | 管理后台密码 | 可选 |
重新部署 - 修改环境变量后需重新部署生效
第三步:Docker 自托管部署(可选)
如果你希望在自己的 VPS/NAS 上运行(不依赖 Cloudflare Pages 运行时):
复制环境变量模板:
npm run docker:init-env
该命令会在 .env 不存在时自动创建,并仅在密钥为空或占位符时生成 CONFIG_ENCRYPTION_KEY 与 SESSION_SECRET,不会每次重置已有密钥。
至少填写以下关键变量:
CONFIG_ENCRYPTION_KEYSESSION_SECRET一套默认存储配置(例如
TG_BOT_TOKEN+TG_CHAT_ID)可选设置存储:
默认:
SETTINGS_STORE=sqliteRedis 模式:
SETTINGS_STORE=redis且配置SETTINGS_REDIS_URL
启动服务:
npm run docker:up
如需启用本地 Redis(用于基础设置存储):
docker compose --profile redis up -d --build
访问地址:
上传首页:
http://<host>:8080/管理后台:
http://<host>:8080/admin.htmlWebDAV 页面:
http://<host>:8080/webdav.html
完整 Docker 说明请查看 README-DOCKER.md。
WebDAV 回归验证(Cloudflare Pages / Docker 通用)
部署完成后,建议至少执行一次 WebDAV 烟测,确认“配置测试 -> 上传 -> 下载 -> 删除”完整闭环。
示例:
BASE_URL=https://你的域名 \
BASIC_USER=admin BASIC_PASS=your_password \
SMOKE_STORAGE_TYPE=webdav \
SMOKE_STORAGE_CONFIG_JSON='{"baseUrl":"https://dav.example.com","username":"u","password":"p","rootPath":"uploads"}' \
node scripts/storage-regression.js校验标准:
/api/status中webdav.connected必须为true/api/storage/:id/test必须返回connected=true回归脚本中的 WebDAV
upload / download / delete三步必须全部通过
如果是 Docker 部署,只需把 BASE_URL 换成你的自托管地址,例如 http://localhost:8080。
Docker 登录 API(curl 示例)
/api/auth/login 同时兼容两种请求体:
{"username":"...","password":"..."}{"user":"...","pass":"..."}
curl -i -X POST "http://localhost:8080/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"your_password"}'curl -i -X POST "http://localhost:8080/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"user":"admin","pass":"your_password"}'安全提示:请勿泄露或提交 .env 内 token/secret(如 TG_BOT_TOKEN、DISCORD_BOT_TOKEN、HF_TOKEN、SESSION_SECRET、CONFIG_ENCRYPTION_KEY);若疑似泄露请立即轮换并重启服务。
存储配置
Telegram 增强模式(自部署 Bot API + Webhook)
项目已支持将 Telegram API 基础地址切换为自部署 Bot API,并支持通过 Webhook 在群/频道接收文件后自动回复直链。
关键环境变量:
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| CUSTOM_BOT_API_URL | 自部署 Bot API 地址(不填则默认 https://api.telegram.org) | http://127.0.0.1:8081 |
| PUBLIC_BASE_URL | Webhook 回链时使用的公网域名(建议填写) | https://img.example.com |
| TG_WEBHOOK_SECRET | Webhook 密钥,校验头 X-Telegram-Bot-Api-Secret-Token | your-secret |
| TELEGRAM_LINK_MODE | Telegram 链接模式,设为 signed 启用签名直链 | signed |
| MINIMIZE_KV_WRITES | 设为 true 时启用低 KV 写入策略(也会启用签名直链) | true |
| TELEGRAM_METADATA_MODE | Telegram 元数据写入策略:off 关闭后台索引写入,默认写轻量索引 | off |
| TG_UPLOAD_NOTIFY | 网页上传成功后,是否额外发送“直链+File ID”通知消息 | true |
| FILE_URL_SECRET | 签名直链密钥(不填则回退到 TG_Bot_Token) | random-long-secret |
Webhook 部署步骤:
在 Telegram 中把 Bot 拉进目标频道/群并授予发言权限(频道建议管理员)。
在 Cloudflare Pages 中配置
TG_Bot_Token、PUBLIC_BASE_URL、TG_WEBHOOK_SECRET,然后重新部署。调用
setWebhook指向本项目接口:https://你的域名/api/telegram/webhook。频道/群内发送图片或文件,Bot 会自动回复
/file/...直链。
setWebhook 示例(官方 API):
curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d "{\"url\":\"https://img.example.com/api/telegram/webhook\",\"secret_token\":\"<YOUR_SECRET>\",\"allowed_updates\":[\"message\",\"channel_post\"]}"setWebhook 示例(自部署 Bot API):
curl -X POST "http://127.0.0.1:8081/bot<YOUR_BOT_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d "{\"url\":\"https://img.example.com/api/telegram/webhook\",\"secret_token\":\"<YOUR_SECRET>\",\"allowed_updates\":[\"message\",\"channel_post\"]}"关于 2G 文件:
使用自部署 Bot API(CUSTOM_BOT_API_URL)并由 Telegram 客户端直接发到群/频道,再由 Webhook 回链,可利用 Bot API 大文件能力(常见可到 2GB)。
但网页上传链路仍受当前前端策略与 Cloudflare 请求体限制影响(见下方“使用限制”),不等同于前端直接上传 2GB。注意: 自部署 Bot API 下载文件会先缓存到本地磁盘,请预留足够空间并关注 I/O。
Telegram 低 KV 写入模式(可选)
当你担心 Cloudflare KV 每日读写额度不够时,可以启用:
TELEGRAM_LINK_MODE=signed(仅 Telegram 文件使用签名直链)或
MINIMIZE_KV_WRITES=true(同时影响分片上传任务写入策略)
启用后,Telegram 文件默认仍会写入轻量 KV 索引(用于后台列表和管理操作),下载时通过签名参数直接解析 file_id,从而降低 KV 读写压力。
可选取舍: 若你希望 Telegram 文件完全不写入 KV,请额外设置
TELEGRAM_METADATA_MODE=off。此时文件不会出现在后台列表,也无法使用依赖 KV 元数据的标签/黑白名单/删除流程。
KV 存储(图片管理,必需)
启用图片管理功能需要配置 KV:
进入 Cloudflare Dashboard →
Workers 和 Pages→KV点击
创建命名空间,命名为k-vault进入 Pages 项目 →
设置→函数→KV 命名空间绑定添加绑定:变量名
img_url,选择创建的命名空间重新部署项目
前端 UI 设计配置(跨端同步)
支持在后台统一设置全站 UI 风格(首页、图库、后台、WebDAV、登录页)。
入口位置:
打开管理后台:
/admin.html点击工具栏中的 前端 UI 设计(滑杆图标)
在弹窗中调整样式并点击 保存设置
可配置项:
背景图(全站 / 登录页单独)
卡片透明度与模糊强度(毛玻璃效果)
动态背景特效类型与强度(含移动端优化)
持久化机制:
Cloudflare Pages:写入 KV 键
ui_config(通过img_url绑定访问)Docker 自托管:写入
data/ui_config.json前端会在接口失败时降级到
localStorage(仅本机生效)
接口说明:
GET /api/ui-config:读取配置(页面初始化自动调用)POST /api/ui-config:保存配置(需管理员登录态)
快速排查:
GET /api/ui-config返回source: "default":表示服务端尚未保存过配置,或写入失败Cloudflare 场景请确认:Pages 项目已绑定 KV(变量名必须是
img_url),且变更后已重新部署若保存后跨端未生效,先强制刷新页面缓存(
Ctrl+F5/ 无痕窗口),再查看 Functions 日志中的/api/ui-config请求记录
R2 存储(大文件支持,可选)
配置 R2 可支持最大 100MB 文件上传:
创建存储桶
Cloudflare Dashboard →
R2 对象存储→创建存储桶命名为
k-vault-files
绑定到项目
Pages 项目 →
设置→函数→R2 存储桶绑定变量名
R2_BUCKET,选择存储桶
启用 R2
设置→环境变量→ 添加USE_R2=true重新部署
S3 兼容存储(可选)
支持任何 S3 兼容的对象存储服务,包括 AWS S3、MinIO、BackBlaze B2、阿里云 OSS 等。
环境变量:
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| S3_ENDPOINT | S3 服务端点 URL | https://s3.us-east-1.amazonaws.com |
| S3_REGION | 区域 | us-east-1 |
| S3_ACCESS_KEY_ID | 访问密钥 ID | AKIA... |
| S3_SECRET_ACCESS_KEY | 秘密访问密钥 | wJalr... |
| S3_BUCKET | 存储桶名称 | my-filebed |
不同服务商的 Endpoint 示例:
| 服务商 | Endpoint 格式 | Region |
| :--- | :--- | :--- |
| AWS S3 | https://s3.{region}.amazonaws.com | us-east-1 等 |
| MinIO | https://minio.example.com:9000 | us-east-1 |
| BackBlaze B2 | https://s3.{region}.backblazeb2.com | us-west-004 等 |
| 阿里云 OSS | https://oss-{region}.aliyuncs.com | cn-hangzhou 等 |
| Cloudflare R2 | https://{account_id}.r2.cloudflarestorage.com | auto |
部署步骤:
在你的 S3 服务商创建存储桶
获取 Access Key ID 和 Secret Access Key
在 Cloudflare Pages 项目中添加上述环境变量
重新部署,前端将自动显示 S3 存储选项
Discord 存储(可选)
通过 Discord 频道存储文件,支持 Webhook 和 Bot 两种方式。
注意: Discord 附件 URL 会在约 24 小时后过期。本项目通过代理方式提供文件下载,每次请求时自动刷新 URL。当前版本会优先使用 Bot 查询消息,并在失败时自动回退到 Webhook 查询。若同时配置 Bot + Webhook,请确保 Bot 对 Webhook 所在频道具备读取权限。
环境变量:
| 变量名 | 说明 | 必需 |
| :--- | :--- | :---: |
| DISCORD_WEBHOOK_URL | Discord Webhook URL(推荐用于上传) | 二选一 |
| DISCORD_BOT_TOKEN | Discord Bot Token(用于获取和删除文件) | 推荐 |
| DISCORD_CHANNEL_ID | Discord 频道 ID(Bot 模式上传时需要) | Bot 模式 |
Webhook 方式部署(推荐):
在 Discord 服务器中,进入频道设置 → 集成 → Webhook
创建新的 Webhook,复制 Webhook URL
在 Cloudflare Pages 添加环境变量
DISCORD_WEBHOOK_URL(推荐)同时创建 Discord Bot 并添加
DISCORD_BOT_TOKEN,用于文件获取和删除重新部署
Bot 方式部署:
前往 Discord Developer Portal 创建应用
在 Bot 标签页创建 Bot,获取 Token
在 OAuth2 → URL Generator 中,选择
botscope,并给 Bot 授予Administrator权限使用生成的 URL 邀请 Bot 到你的服务器
在 Cloudflare Pages 添加
DISCORD_BOT_TOKEN和DISCORD_CHANNEL_ID重新部署
故障排查(File not found on Discord):
确认
DISCORD_WEBHOOK_URL指向的频道,Bot 也能访问(频道不一致会导致上传成功但直链失败)。直接给 Bot 授予
Administrator权限,避免频道权限遗漏导致读取失败。修改环境变量后必须重新部署 Cloudflare Pages(仅保存变量不会即时生效)。
打开
/api/status检查 Discord 状态是否显示为bot、webhook或bot+webhook。
限制:
无 Boost 服务器:25MB/文件
Level 2 Boost:50MB/文件
Level 3 Boost:100MB/文件
HuggingFace 存储(可选)
使用 HuggingFace Datasets API 存储文件。文件以 git commit 的形式保存在 Dataset 仓库中。
环境变量:
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| HF_TOKEN | HuggingFace 写入权限 Token | hf_xxxxxxxxxxxx |
| HF_REPO | Dataset 仓库 ID | username/my-filebed |
部署步骤:
注册 HuggingFace 账户
创建新的 Dataset 仓库(Settings → New Dataset)
前往 Settings → Access Tokens 创建 Token(需要 Write 权限)
在 Cloudflare Pages 添加
HF_TOKEN和HF_REPO环境变量重新部署
限制:
普通上传(base64):约 35MB/文件
LFS 上传:最大 50GB/文件
免费用户仓库总大小:约 50GB
WebDAV 存储(可选)
适合对接 alist/openlist、NAS、群晖、坚果云等支持 WebDAV 的存储服务。
你可以把 WebDAV 作为统一挂载入口,后台继续按目录管理文件,已生成的 /file/... 直链不受目录调整影响。
其中 alist/openlist 建议直接填写其 WebDAV 挂载地址(例如 https://example.com/dav),不要填管理后台地址。
环境变量:
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| WEBDAV_BASE_URL | WebDAV 基础地址(不带结尾 /) | https://dav.example.com/dav |
| WEBDAV_USERNAME | WebDAV 用户名(Basic 认证) | alice |
| WEBDAV_PASSWORD | WebDAV 密码(Basic 认证) | your-password |
| WEBDAV_BEARER_TOKEN | Bearer Token(与用户名/密码二选一) | eyJhbGciOi... |
| WEBDAV_TOKEN | Bearer Token 兼容变量名(可选) | eyJhbGciOi... |
| WEBDAV_ROOT_PATH | 可选,WebDAV 根目录前缀 | k-vault/uploads |
部署步骤:
在你的 WebDAV 服务端准备一个可写目录,并确认具备
PUT/GET/DELETE/MKCOL权限。在 Cloudflare Pages 项目中添加上述
WEBDAV_*变量(认证方式二选一:用户名+密码或Bearer Token)。重新部署后,访问
/api/status检查webdav.connected与webdav.enabled,或直接打开/webdav.html测试上传。Docker 自托管场景下,在
.env填写相同变量后重启容器(npm run docker:up或docker compose up -d --build)。
常见问题:
Not configured:通常是WEBDAV_BASE_URL为空,或认证变量未正确填写。401/403:认证失败,请检查账号密码或 Token。上传失败且提示
MKCOL:说明服务端不允许建目录或路径权限不足,请调整 WebDAV 权限。
GitHub 存储(可选)
支持将文件存到 GitHub 仓库,提供两种模式:
releases:更适合二进制文件,默认模式contents:更适合小文件/文本文件(单文件建议不超过 20MB)
环境变量:
| 变量名 | 说明 | 示例 |
| :--- | :--- | :--- |
| GITHUB_TOKEN | GitHub Token(需要仓库写入权限) | ghp_xxxxxxxxxxxx |
| GITHUB_REPO | 目标仓库(owner/repo) | yourname/kvault-files |
| GITHUB_MODE | 存储模式:releases / contents | releases |
| GITHUB_PREFIX | 可选,仓库内路径前缀 | uploads |
| GITHUB_RELEASE_TAG | 可选,releases 模式固定标签 | k-vault-storage |
| GITHUB_BRANCH | 可选,contents 模式目标分支 | main |
| GITHUB_API_BASE | 可选,GitHub API 基址(企业版时可改) | https://api.github.com |
部署步骤:
准备一个 GitHub 仓库(建议专门用于存储文件)。
在 GitHub
Settings -> Developer settings -> Personal access tokens创建 Token(Classic 或 Fine-grained 均可),确保对目标仓库有写权限。在 Cloudflare Pages 项目中添加
GITHUB_TOKEN、GITHUB_REPO,可按需补充GITHUB_MODE等可选变量。重新部署后,首页会出现 GitHub 存储选项(未连通时为禁用态)。
可访问
/api/status确认github.connected与github.enabled状态。
建议:
大文件优先使用
releases模式。需要目录化管理和频繁覆盖时可使用
contents模式。
访客上传功能
允许未登录用户上传文件,站长可自行配置是否开启及限制规则。
| 变量名 | 说明 | 默认值 |
| :--- | :--- | :--- |
| GUEST_UPLOAD | 启用访客上传 | false |
| GUEST_MAX_FILE_SIZE | 访客单文件最大大小(字节) | 5242880(5MB) |
| GUEST_DAILY_LIMIT | 访客每日上传次数限制(按 IP 计) | 10 |
启用方式:
在环境变量中设置
GUEST_UPLOAD=true按需调整
GUEST_MAX_FILE_SIZE和GUEST_DAILY_LIMIT确保已配置
BASIC_USER和BASIC_PASS(否则无访客/管理员区分)重新部署
功能说明:
访客可在首页直接上传文件,无需登录
访客有单文件大小限制和每日上传次数限制
访客不能使用分片上传和高级存储选项(S3/Discord/HuggingFace/GitHub)
访客不能访问管理后台和图片浏览页
限制基于访客 IP 地址,每日自动重置
高级配置
| 变量名 | 说明 | 默认值 |
| :--- | :--- | :--- |
| ModerateContentApiKey | 图片审核 API Key(从 moderatecontent.com 获取) | - |
| WhiteList_Mode | 白名单模式,仅白名单图片可加载 | false |
| USE_R2 | 启用 R2 存储 | false |
| CUSTOM_BOT_API_URL | Telegram API 基础地址(支持自部署 Bot API) | https://api.telegram.org |
| PUBLIC_BASE_URL | Webhook 回链时使用的公开域名 | 当前请求域名 |
| TG_WEBHOOK_SECRET | Telegram Webhook 密钥(也兼容 TELEGRAM_WEBHOOK_SECRET) | - |
| TELEGRAM_LINK_MODE | Telegram 链接模式(signed 为签名直链) | - |
| MINIMIZE_KV_WRITES | 降低 KV 写入(也会启用签名直链) | false |
| TELEGRAM_METADATA_MODE | Telegram 元数据写入策略(off 关闭后台索引写入) | on |
| TG_UPLOAD_NOTIFY | 网页上传成功后发送“直链+File ID”通知消息 | true |
| FILE_URL_SECRET | 签名直链密钥(也兼容 TG_FILE_URL_SECRET) | TG_Bot_Token |
| CHUNK_BACKEND | 分片临时存储后端(auto/r2/kv) | auto |
| disable_telemetry | 禁用遥测 | - |
Docker 运行时变量(自托管模式)
| 变量名 | 说明 | 默认值 |
| :--- | :--- | :--- |
| PORT | 容器内 API 服务端口 | 8787 |
| DATA_DIR | 数据目录 | /app/data |
| DB_PATH | SQLite 数据库路径 | /app/data/k-vault.db |
| CHUNK_DIR | 分片临时目录 | /app/data/chunks |
| CONFIG_ENCRYPTION_KEY | 用于加密存储配置密钥(必填) | - |
| SESSION_SECRET | 会话/签名密钥(建议与加密密钥不同) | - |
| UPLOAD_MAX_SIZE | 最大上传大小(字节) | 104857600 |
| UPLOAD_SMALL_FILE_THRESHOLD | 直传/分片策略阈值(字节) | 20971520 |
| CHUNK_SIZE | 分片大小(字节) | 5242880 |
| DEFAULT_STORAGE_TYPE | 启动时默认存储类型(telegram/r2/s3/discord/huggingface/webdav/github) | telegram |
| SETTINGS_STORE | 基础设置存储后端(sqlite 或 redis) | sqlite |
| SETTINGS_REDIS_URL | Redis URL(Upstash/Redis/KVrocks,SETTINGS_STORE=redis 时必填) | - |
| SETTINGS_REDIS_PREFIX | Redis 键前缀 | k-vault |
| SETTINGS_REDIS_CONNECT_TIMEOUT_MS | Redis 连接/心跳超时(毫秒) | 5000 |
| WEB_PORT | docker compose 对外 Web 端口 | 8080 |
页面说明
| 页面 | 路径 | 说明 |
| :--- | :--- | :--- |
| 首页/上传 | / | 批量上传、拖拽、粘贴上传 |
| WebDAV 独立页 | /webdav.html | WebDAV 上传/状态检查/URL 上传 |
| 图片浏览 | /gallery.html | 图片网格浏览 |
| 管理后台 | /admin.html | 文件管理、黑白名单 |
| 文件预览 | /preview.html | 多格式文件预览 |
| 登录页 | /login.html | 后台登录 |
使用限制
Cloudflare 免费额度:
每日 100,000 次请求
KV 每日 1,000 次写入、100,000 次读取、1,000 次列出
超出后需升级付费计划($5/月起)
建议 Telegram 场景开启签名直链或低 KV 写入模式以降低额度压力
Docker 自托管模式下,Node 运行时不受 Cloudflare 免费额度限制(受你自己的服务器和存储后端限制)
各存储后端文件大小限制:
| 存储后端 | 单文件最大大小 |
| :--- | :--- |
| Telegram(网页直传) | 小文件直传 20MB;分片流程当前上限 100MB |
| Telegram(自部署 Bot API + Telegram 客户端 + Webhook) | 受 Bot API 与部署环境影响,常见可达 2GB |
| Cloudflare R2 | 100MB(分片上传) |
| S3 兼容存储 | 100MB(分片上传) |
| Discord(无 Boost) | 25MB |
| Discord(Level 2+) | 50-100MB |
| HuggingFace | 35MB(普通)/ 50GB(LFS) |
说明:
/api/upload-from-url当前仍按 20MB 限制处理 Telegram 上传。
所有环境变量参考
| 变量名 | 说明 | 必需 |
| :--- | :--- | :---: |
| `TG_Bot_Token` | Telegram Bot Token | ✅ |
| `TG_Chat_ID` | Telegram 频道 ID | ✅ |
| `TG_BOT_TOKEN` | Telegram Bot Token(Docker/自托管命名) | 可选 |
| `TG_CHAT_ID` | Telegram 频道 ID(Docker/自托管命名) | 可选 |
| `CUSTOM_BOT_API_URL` | 自部署 Telegram Bot API 地址 | 可选 |
| `PUBLIC_BASE_URL` | Webhook 回链域名 | 可选 |
| `TG_WEBHOOK_SECRET` | Telegram Webhook 密钥 | 可选 |
| `TELEGRAM_WEBHOOK_SECRET` | 同上(兼容变量名) | 可选 |
| `TELEGRAM_LINK_MODE` | Telegram 链接模式(`signed`) | 可选 |
| `MINIMIZE_KV_WRITES` | 降低 KV 写入并启用签名直链 | 可选 |
| `TELEGRAM_METADATA_MODE` | Telegram 元数据写入策略(`off` 关闭后台索引写入) | 可选 |
| `TG_UPLOAD_NOTIFY` | 网页上传成功后发送“直链+File ID”通知消息 | 可选 |
| `FILE_URL_SECRET` | 签名直链密钥 | 可选 |
| `TG_FILE_URL_SECRET` | 同上(兼容变量名) | 可选 |
| `BASIC_USER` | 管理后台用户名 | 可选 |
| `BASIC_PASS` | 管理后台密码 | 可选 |
| `USE_R2` | 启用 R2 存储 | 可选 |
| `CHUNK_BACKEND` | 分片临时存储后端(`auto`/`r2`/`kv`) | 可选 |
| `S3_ENDPOINT` | S3 端点 URL | 可选 |
| `S3_REGION` | S3 区域 | 可选 |
| `S3_ACCESS_KEY_ID` | S3 访问密钥 | 可选 |
| `S3_SECRET_ACCESS_KEY` | S3 秘密密钥 | 可选 |
| `S3_BUCKET` | S3 存储桶名 | 可选 |
| `DISCORD_WEBHOOK_URL` | Discord Webhook URL | 可选 |
| `DISCORD_BOT_TOKEN` | Discord Bot Token | 可选 |
| `DISCORD_CHANNEL_ID` | Discord 频道 ID | 可选 |
| `HF_TOKEN` | HuggingFace Token | 可选 |
| `HF_REPO` | HuggingFace 仓库 ID | 可选 |
| `WEBDAV_BASE_URL` | WebDAV 基础地址 | 可选 |
| `WEBDAV_USERNAME` | WebDAV 用户名(Basic 认证) | 可选 |
| `WEBDAV_PASSWORD` | WebDAV 密码(Basic 认证) | 可选 |
| `WEBDAV_BEARER_TOKEN` | WebDAV Bearer Token(与用户名/密码二选一) | 可选 |
| `WEBDAV_TOKEN` | WebDAV Bearer Token 兼容变量名 | 可选 |
| `WEBDAV_ROOT_PATH` | WebDAV 根目录前缀 | 可选 |
| `GITHUB_TOKEN` | GitHub Token(仓库写权限) | 可选 |
| `GITHUB_REPO` | GitHub 仓库(`owner/repo`) | 可选 |
| `GITHUB_MODE` | GitHub 存储模式(`releases`/`contents`) | 可选 |
| `GITHUB_PREFIX` | GitHub 存储路径前缀 | 可选 |
| `GITHUB_RELEASE_TAG` | GitHub Release 标签(releases 模式) | 可选 |
| `GITHUB_BRANCH` | GitHub 分支(contents 模式) | 可选 |
| `GITHUB_API_BASE` | GitHub API 基址 | 可选 |
| `GUEST_UPLOAD` | 启用访客上传 | 可选 |
| `GUEST_MAX_FILE_SIZE` | 访客文件大小限制(字节) | 可选 |
| `GUEST_DAILY_LIMIT` | 访客每日上传次数 | 可选 |
| `ModerateContentApiKey` | 图片审核 API Key | 可选 |
| `WhiteList_Mode` | 白名单模式 | 可选 |
| `disable_telemetry` | 禁用遥测 | 可选 |
| `PORT` | Docker 自托管模式 API 端口 | 可选 |
| `DATA_DIR` | Docker 自托管模式数据目录 | 可选 |
| `DB_PATH` | Docker 自托管模式 SQLite 路径 | 可选 |
| `CHUNK_DIR` | Docker 自托管模式分片目录 | 可选 |
| `CONFIG_ENCRYPTION_KEY` | Docker 自托管模式存储配置加密密钥(必填) | 可选 |
| `SESSION_SECRET` | Docker 自托管模式会话/签名密钥 | 可选 |
| `UPLOAD_MAX_SIZE` | Docker 自托管模式最大上传大小(字节) | 可选 |
| `UPLOAD_SMALL_FILE_THRESHOLD` | Docker 自托管模式直传阈值(字节) | 可选 |
| `CHUNK_SIZE` | Docker 自托管模式分片大小(字节) | 可选 |
| `DEFAULT_STORAGE_TYPE` | Docker 自托管模式默认存储类型 | 可选 |
| `SETTINGS_STORE` | Docker 自托管基础设置存储后端(`sqlite`/`redis`) | 可选 |
| `SETTINGS_REDIS_URL` | Docker 自托管 Redis URL(Upstash/Redis/KVrocks) | 可选 |
| `SETTINGS_REDIS_PREFIX` | Docker 自托管设置存储 Redis 键前缀 | 可选 |
| `SETTINGS_REDIS_CONNECT_TIMEOUT_MS` | Docker 自托管 Redis 连接/心跳超时(毫秒) | 可选 |
| `WEB_PORT` | `docker compose` 对外 Web 端口 | 可选 |
API 使用指南
1. 创建 API Token
打开管理面板
/admin.html点击工具箱菜单中的 API Token 管理
创建 Token 时按需选择权限:
upload/read/delete/paste,并设置过期时间
2. 常用示例
curl 上传文件:
curl -X POST https://your-kvault.com/api/v1/upload \ -H "Authorization: Bearer kvault_xxxxxxxxxxxx" \ -F "file=@/path/to/file.png"
curl 上传并设置过期和密码:
curl -X POST https://your-kvault.com/api/v1/upload \ -H "Authorization: Bearer kvault_xxxxxxxxxxxx" \ -F "file=@backup.tar.gz" \ -F "expires_in=86400" \ -F "password=mypassword"
curl 创建文本粘贴:
curl -X POST https://your-kvault.com/api/v1/paste \
-H "Authorization: Bearer kvault_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"content":"Hello World","language":"text"}'Shell 快捷函数(可加入 .bashrc / .zshrc):
kvault() {
curl -s -X POST "https://your-kvault.com/api/v1/upload" \
-H "Authorization: Bearer $KVAULT_TOKEN" \
-F "file=@$1" | jq -r '.links.share'
}
# 使用: kvault screenshot.png3. ShareX 配置
目标类型(Destination type):
Image uploader/File uploader请求地址(Request URL):
https://your-kvault.com/api/v1/upload请求头(Headers):
Authorization: Bearer kvault_xxxxxxxxxxxx请求体(Body):
Form data(multipart/form-data)文件字段名(File form name):
file返回 URL 路径(URL path):
$.links.download(或$.links.share)
4. API 端点速查
| 方法 | 端点 | 权限 | 说明 |
| :--- | :--- | :--- | :--- |
| POST | /api/v1/upload | upload | 上传文件(multipart/form-data,字段 file) |
| GET | /api/v1/files | read | 列出文件(支持分页) |
| GET | /api/v1/file/:id | read | 下载文件 |
| GET | /api/v1/file/:id/info | read | 获取文件元信息 |
| DELETE | /api/v1/file/:id | delete | 删除文件 |
| POST | /api/v1/paste | paste | 创建文本粘贴 |
| GET | /api/v1/pastes | read | 列出粘贴(支持分页) |
| GET | /api/v1/paste/:id | read | 获取粘贴内容 |
| DELETE | /api/v1/paste/:id | delete | 删除粘贴 |
与《免费图片文件托管解决方案系统及源码》相关的《完整源码》
无线数字全双工对讲机电路+源码-电路方案
一个SPEEX全双工数字对讲机。用NRF24L01实现了全双工通信,就像打电话一样,目前实现的只是点对点,直线距离测试最远有300M,用了网上那种加了PA的模块。电路采用STM32F103R作为主控制芯片。注意:8k采样,是1S/1KB 的数据量,也就是1MS一个B,压缩率真的很高。音质和打电话差不多,噪音很小。其实要传的数据量很小,1S/KB 的数据量,这里选择2.4G的原因是因为要用应答包携带...
10 82029 0
在线图片水印工具源码
安全地为你的图片加水印,无任何网络请求,特别适合各种敏感证件(身份证,驾照,护照等)在线测试http://tt18.cn/tool/picwater/
5 149418 0
08i8视频图片资源下载工具源码(TypeScript源码)可打包成mac桌面安装程序和windows桌面安装程序
支持获取视频号、抖音、快手、小红书、酷狗音乐、qq音乐等网络资源!基于electron-vite-vue操作简单、可获取不同类型的资源支持获取视频、音频、图片、m3u8,附使用教程及常见问题解决方案yarn installyarn run dev打包macyarn run build --mac打包winyarn run build --win
30 73543 0
html下载模板克隆工具java源码(一键下载所有隐藏资源css、js、图片、字体)
java开发,附成品可以同时下载多个网页递归下载所有隐藏资源css、js、图片、字体
5 99003 0
08i8Smp转mp3的工具,解密SMP格式音频,把SMP文件转为mp3文件的C语言源码和工具
解密SMP格式音频,把SMP文件转为mp3文件的C语言源码和工具说明:c.txt 为C语言源码08i8SmpXorDecrypt.exe 为生成的工具使用方法1、用16进制的方式打开要解密的smp文件(如:08i8.com.smp),看文件头 的第5到8组16进制是什么(如:E8)2、把SmpXorDecrypt.exe拷贝到smp文件目录3、电脑-开始-运行-cmd.exe(打开命令行窗口)4、...
5 164212 0
2022最新云存储网盘系统_文件分享系统_文件存储系统
最新云存储网盘系统可运营
5 142935 0
iconfont预览文件生成工具nodejs源码
用法:1、把下载的iconfont.js 放在iconfont.css同级目录2、运行node iconfont 这里会在目录下生成iconfont.html3、在浏览器上打开iconfont.html就可以预览iconfont了注意:1、系统要安装node.js2、注意iconfont.css与iconfont.js 标签的关系(有案例,如果对不上改一下源码)
5 129028 0

