彩虹外链网盘是一款基于 PHP 开发的网盘与外链分享程序,支持多种类型文件上传,并可生成对应的外链地址,适用于文件分享、图床、音视频外链等多种使用场景。
本项目是在开源版本基础上进行二次开发与界面美化的版本,保留了原有核心功能,并在外观、用户体系、付费权限、邮件通知等方面做了扩展。
文件与外链
- 支持所有常见格式文件上传,可多选批量上传、Ctrl+V 粘贴上传、拖拽上传
- 生成文件外链、图片外链、音乐外链、视频外链,并同时给出 UBB 代码和 HTML 代码
- 文本、图片、音乐、视频在线预览,TXT 等文本内容在线查看
- 文件内容在线编辑,支持
txt、md、json、js、css、html、xml、svg、csv、ini、conf、yaml、sql、vue、ts、jsx等格式,可限定所有人 / 仅登录用户 / 仅指定 UID 使用 - 覆盖上传:用新文件替换已有文件,对外链接保持不变
- 上传时可设置访问密码、可选择是否在首页文件列表公开
- 文件列表支持关键字搜索、按类型筛选(图片 / 视频 / 音频 / 文档 / 压缩包),加密文件带锁形标记
- 列表可按上传时间或文件大小正反排序(
?sort=new|old|big|small),部分外观下还能在列表和网格视图之间切换 - 可作为网盘使用,也可作为图床或音乐在线试听网站使用
用户与登录
- QQ / 微信快捷登录
- 邮箱注册与登录:填邮箱收验证码即可注册,支持算术验证码
- 一个账号多种登录方式:邮箱账号可绑定 QQ / 微信,快捷登录账号可绑定邮箱并设置密码,注册时用的那种方式不可解绑
- 个人中心:概览、我的文件、订单记录、账号设置四个页签,文件可重命名、设访问密码、切公开私密、单个与批量删除、复制外链
- 用户管理:可区分普通 / 高级用户,单独设置每日上传数量、单文件大小、权限有效期,支持封禁、解封、查看用户文件、删除用户
付费与运营
- 购买权限:把上传额度做成套餐出售,付款成功后权限立即生效
- 支付宝当面付、易支付两种收款方式,可只开一种或同时开启
- 订单记录:按状态筛选、查看累计金额、补发权限、清理未支付订单
- 赞助页与赞助名单
邮件
- 四种发信通道可选:SMTP、Resend、Brevo、SendGrid,可同时勾选多个
- 后台一键测试发信,失败时显示具体原因
- 发信记录:每封验证码邮件的发送结果、通道、来源都有据可查
存储与安全
- 支持本地存储及阿里云 OSS、腾讯云 COS、华为云 OBS、又拍云、七牛云、通用 S3 兼容存储、WebDAV、OneDrive、OpenList
- 存储类型设置改为卡片式:一眼看清每种存储支持直传 / 直链 / 断点续传,卡片上还标出每个存储里压着多少文件,并可一键做连接测试(用当前填写的参数测,不必先保存)
- 有文件之后也能换存储:每个文件记着自己存在哪儿,切换只影响之后的新上传,已上传的文件照常能下、外链不失效
- 可同时开放多个存储:上传页出现「存储位置」下拉让用户自己挑,每个存储还能限定所有人 / 仅登录用户 / 仅高级用户可用
- 图片违规检测,可对接阿里云 / 腾讯云内容安全,也可用自建服务在本机跑模型(文件不出服务器、没有调用费)
- 视频违规检测(自建服务):ffmpeg 抽帧逐帧判分,上传后先挂起、检测完自动放行或封禁,后台能看命中了哪几帧
- 违规文件公示,向访客公开已封禁文件的处理情况
- 覆盖记录审计,管理员可复查每一次内容替换
- 每日上传数量与每分钟上传次数限制
界面
- 28 套外观:15 套配色型 + 13 套布局型,前台、后台、公告条、赞助页、弹窗全部联动;每套外观还能在后台单独换整套配色(挑个主色,全站颜色跟着走)
- 广告公告位设置,可自定义顶部公告与首页广告位
- 手机端适配
登录与注册
购买权限页
个人中心
一级菜单收成「首页 / 文件 / 用户 / 设置 / 退出」五项,「设置」下拉再按「站点 / 上传与存储 / 用户与付费 / 安全与合规 / 其它」分组,不用在十几个二级页面里翻找。侧栏型外观(控制台侧栏风 / 数据控制台风 / 深色工作台风 / 渐变仪表盘风,以及工作台家族里除云端门户风外的六套)下这些分组 是常驻展开的静态列表,不需要点开;云端门户风前台是顶部横向导航,后台也保持顶栏。
后台首页
文件管理
用户管理
覆盖记录
存储类型设置
内容检测设置
内容检测记录
外观设置
购买套餐设置
订单记录
邮件发信设置
发信记录
用户 IP 地址获取设置
后台「系统设置 – 外观设置」可切换 28 套 外观,前台页面、后台管理界面、顶部公告条、友链广告位、赞助页和各类弹窗会一起联动。
外观分成两类:布局型 改的是页面结构(导航位置、内容排版),配色型 只改颜色和质感、保持默认的顶部导航布局。
| 外观 | 结构 | 后台 |
|---|---|---|
| 控制台侧栏风 | 顶部导航变为左侧固定侧栏,内容区为圆角卡片布局 | 同步改为侧栏 |
| 数据控制台风 | 更紧凑的侧栏,标题与搜索独立成顶栏,文件列表上方增加统计卡与类型筛选 | 同步改为侧栏 |
| 上传门户风 | 居中的门户式顶部导航,首页增加大号上传引导区,文件列表改为卡片网格 | 只换配色,保留顶栏 |
| 深色工作台风 | 深色底 + 72px 图标导航条(鼠标移上去展开文字),右侧常驻文件预览面板 | 同步改为侧栏 |
| macOS 窗口风 | 整站套进一个 macOS 窗口:带红黄绿三颗灯的标题栏 + 底部状态栏,文件列表默认是访达式图标网格,可一键切回列表视图 | 同步套窗口,登录页也是 |
| 渐变仪表盘风 | 白色悬浮圆角侧栏(默认展开显示文字),列表页顶部是问候栏 + 紫色渐变额度卡与统计卡,右侧一列存储分布、最近上传、快捷入口面板 | 同步改为侧栏 |
| 蓝白工作台风 | 白色分组侧栏(工作空间 / 个人中心,底部升级卡)+ 顶部搜索条(Ctrl K 聚焦),列表页是蓝白横幅 + 四张统计卡 + 带类型筛选、排序、列表 / 网格切换的文件面板,右侧一列今日上传、我的权限、快捷操作、最近动态 | 同步改为侧栏 |
| 深空科技风 | 蓝白工作台的深色版:深蓝星空底 + 发光描边,横幅是大标题加三个卖点,权限卡多一行 | 同步改为侧栏 |
| 紫韵会员风 | 蓝紫渐变横幅、彩色统计卡,右侧首块是金色会员权限卡带升级入口,列表下方加一条卖点横幅 | 同步改为侧栏 |
| 清爽极简风 | 近乎纯白,横幅不做卡片直接铺在页面上,四条勾选卖点 + 两个大按钮,五张统计卡,最近动态是时间轴 | 同步改为侧栏 |
| 蓝天白云风 | 天蓝渐变横幅、右上角三枚浮标卖点,五张统计卡,列表下方是会员升级横幅 | 同步改为侧栏 |
| 潮酷涂鸦风 | 粗黑描边 + 硬投影 + 米色底的撞色风格:黑色侧栏配橙色选中项,超大标题横幅带手写标语和两个大按钮,五张统计卡各一个高饱和颜色 | 同步改为侧栏 |
| 云端门户风 | 家族里唯一的顶部横向导航:天空渐变大横幅带远山和居中大搜索框,浅色统计卡,右侧一列蓝色上传卡、存储空间、最近上传 | 保持顶栏 |
三套侧栏外观(控制台侧栏风 / 数据控制台风 / 深色工作台风)的侧栏底部会显示「今日上传」和「我的权限」两张卡片;渐变仪表盘风把同样的信息放进了顶部那张额度卡;其余外观则在文件列表页和上传页顶部显示一条权限条,内容一致。
工作台家族(7 套)
最后这七套共用同一套页面结构——分组侧栏 + 顶部搜索条 + 主视觉横幅 + 统计卡 + 文件面板 + 右侧数据列,区别在配色、横幅表现和几块可选内容(推广横幅、存储空间、会员卡等)。云端门户风是其中的例外,它把侧栏换成了顶部横向导航,搜索框搬进横幅里。
深色系
| 主题 | 风格 |
|---|---|
| 黑夜风格 | 深色背景、蓝色高亮,适合夜间浏览 |
| 霓虹科技黑夜 | 蓝紫霓虹、科技感边框 |
| 暗黑科技后台风 | 深色点阵背景、半透明暗色面板,偏数据管理感 |
浅色系
| 主题 | 风格 |
|---|---|
| 蓝白清爽 | 默认主题,蓝白配色 |
| 青瓷微澜 | 青瓷色同心波纹,留白通透 |
| 淡紫点阵 | 薰衣草底色配细密点阵 |
| 米白纸张 | 极简纸张质感,横线纸纹配墨黑标题 |
| 淡粉暖调 | 浅粉底色配玫瑰色高亮 |
| 天蓝细纹 | 青蓝色调配斜向细纹 |
| 薄荷蜂巢 | 薄荷绿蜂巢暗纹 |
毛玻璃系
采用多层网格渐变背景叠磨砂玻璃面板,带内侧高光描边与彩色辉光。
| 主题 | 风格 |
|---|---|
| 蓝紫渐变玻璃 | 蓝紫渐变,半透明玻璃卡片 |
| 落日熔金 | 珊瑚橙到品红的落日渐变,浓烈张扬 |
| 深海玻璃 | 深海蓝绿渐变配青色辉光,通透安静 |
| 翡翠流光 | 翡翠绿到松石色,清透有质感 |
| 樱雾玻璃 | 粉紫到天青的浅色雾面渐变,轻盈明亮 |
外观设置页顶部有一条吸顶的「外观配色」工具条(连同「保存外观」按钮),滚到最底下也一直停在上方。挑一个主色和副色,这套外观的 整套配色一起换掉,不是只换几个按钮。
| 项目 | 作用范围 |
|---|---|
| 主色 / 副色 | 该外观用到的全部有色部分:按钮、进度条、导航高亮、面板、卡片、边框、文字、图标、阴影、整页背景,前台和后台一起变 |
| 渐变角度 | 按钮、分页高亮等渐变元素的方向 |
| 中间色 | 渐变仪表盘风顶部那张额度卡的三段渐变 |
| 界面底色:页面底色 / 面板底色 / 正文色 / 边框色 | 灰白系不跟着主色的色相走,所以单独可调。改「面板底色」会把这套外观里所有白卡片、表格、下拉面板的底色一起换掉 |
| 整页背景渐变(起点 / 中间 / 终点 / 角度) | 本来就铺渐变背景的外观:黑夜风格、霓虹科技黑夜、蓝紫渐变玻璃、落日熔金、深海玻璃、翡翠流光、樱雾玻璃 |
换色方式是 色相映射 而不是简单替换:拿该外观原本的主色、辅色当锚点,算出新旧颜色之间的色相 / 饱和度 / 明度差,再把同一份差值套到这套外观的每一个颜色上。所以:
- 主色本身落在原来主色的位置,其余颜色按原有关系跟着走,深浅层次和对比度保持不变
- 纯白、纯黑、灰色(阴影、分隔线)不动,近白的卡片底不会被压暗,深色外观的近黑底也不会糊成一片
- 红色危险、绿色成功这类状态色跟主色系差得远,自动保持原样
- 米白纸张、暗黑科技后台风这种本来就是单色系的外观,走「整套灰阶染上新色相」的路子
- 因此白卡片、页面留白这类灰白底不会跟着主色变,要改它们用上面的「界面底色」四项;这四项按属性类别定点替换(背景类属性认面板底色、文字类属性认正文色、边框类属性认边框色),所以把白卡片换成米色时,按钮上的白字不会跟着变
- 只有这四项本身的颜色会被替换,由它们派生出来的次级底色(如
--surface-soft、--tint)仍按原值走,改动幅度太大时可能需要一起微调
其它细节:
- 工具条里的外观下拉框和下面的外观卡片是 同一个选择,两边双向同步:在哪边选都会同时选中另一边,保存的外观和正在调的颜色永远是同一套
- 每套外观各存各的,改哪套只影响哪套,换回去颜色还在;「恢复默认配色」把当前外观还原成内置配色
- 工具条可以「收起 / 展开」,收起状态记在浏览器里
- 只有改过的外观才会落库,没动过的外观一个字节都不多输出,页面和原来完全一样
- 换色样式由
includes/theme_recolor.php从style.css/admin.css里抽取该外观的规则重算后生成,缓存在assets/css/custom/(按外观 + 颜色 + 源文件时间哈希命名,改了源样式会自动重算;目录不可写时退回页面内联输出) - 静态 404 页在保存外观时一并写入,错误页配色跟站点一致
后台「系统设置 – 用户登录设置」控制登录功能总开关,「邮件发信设置」里控制邮箱注册。
- QQ / 微信快捷登录:配置快捷登录接口后可用,新用户登录后自动注册账号
- 邮箱注册:填邮箱 → 收 6 位验证码 → 设置密码 → 注册完成并直接登录
- 算术验证码:获取验证码前需要算一道简单算术题(如
5 + 3 = ?),可在后台关闭 - 两种方式可以并存,登录页会自动显示可用的入口
后台可配置验证码有效期、同邮箱发送间隔、每日发送上限、全站发信上限,以及一次性邮箱域名黑名单。
登录后从导航栏昵称下拉进入「个人中心」(/user.php),导航栏的「我的文件」也直接落到这里的文件页。游客没有账号,「我的文件」仍然是按浏览器缓存记录显示的首页列表。
页面分四个页签:
| 页签 | 内容 |
|---|---|
| 概览 | 文件数、占用空间、今日上传 / 上限、单文件上限四张数字卡,下面是当前套餐、每日上传(含加量包)、单文件大小、有效期,以及自己文件的类型分布条 |
| 我的文件 | 按文件名搜索、按类型筛选,可重命名、设置或取消访问密码、切换公开 / 私密、复制外链、单个与批量删除,每页 20 条 |
| 订单记录 | 自己的订单号、套餐、金额、支付方式、状态、下单与支付时间;打开页面时会顺手补查一次当面付的漏单 |
| 账号设置 | 账号资料(注册方式、注册时间、最后登录)、修改昵称、登录方式绑定、修改或设置密码 |
「私密」只是不在首页公共列表里出现,外链本身照样能打开,页面上也写着这句提示;真要限制访问得给文件设访问密码。
账号绑定
- 邮箱注册的账号可以绑定 QQ / 微信,之后两种方式都能登录同一个账号
- QQ / 微信登录的账号可以绑定邮箱并同时设置密码,绑定后就能用邮箱 + 密码登录
- 注册时用的那种方式是主身份,不可解绑,所以「至少保留一种登录方式」天然成立
- 同一个邮箱不会落到两个账号上:注册查重时会连绑定关系一起查
- 站点没配发信通道时,绑定邮箱的入口会置灰并说明原因
后台「系统设置 – 邮件发信设置」,用于发送注册验证码。
| 通道 | 说明 |
|---|---|
| SMTP | 填自己的邮箱账号和授权码,QQ 邮箱、163、企业邮箱都可用 |
| Resend / Brevo / SendGrid | 走 HTTPS 接口发信,不受服务器封禁邮件端口的影响 |
- 没有默认通道,勾选哪个用哪个,一个都不勾就是关闭发信
- 勾选多个时按顺序依次尝试,前一个失败自动切到下一个
- 页面底部可以 测试发信,填一个邮箱点一下就知道通不通,失败时显示具体原因
「发信记录」页记录每一次验证码发送:时间、邮箱、用途、状态(已发送 / 已验证 / 发送失败 / 已作废)、通道或失败原因、来源地址。顶部还有最近 1 小时、24 小时的发送量与上限对比,方便判断接口有没有被滥用。
站点可以把上传额度做成套餐卖给用户,付款成功后权限立即生效,全程不需要人工介入。后台入口在「系统设置 – 购买套餐设置」和「订单记录」,前台入口是导航栏的「购买权限」。
两种可以只开一个,也可以同时开着让用户在购买页自己选。
| 方式 | 流程 | 需要填写 |
|---|---|---|
| 支付宝当面付 | 页面内直接出二维码,扫码付款 | 应用 ID、支付宝公钥、商户应用私钥 |
| 易支付 | 点「立即购买」后弹窗选支付宝 / 微信 / QQ 钱包,跳转到收银台 | 接口地址、商户 ID(PID)、商户密钥(KEY) |
还可以设置付款时显示的商品名称、易支付开放哪几个支付通道,以及购买页顶部的公告文字。
套餐在后台自由增删改,支持按分类分区展示。程序内置一套 24 个推荐套餐,点「一键导入推荐套餐」即可导入(同名自动跳过),导入后价格和额度随便改。
每个套餐可以单独设置每日上传数量、单文件大小和有效期,组合出四类套餐:
- 时长套餐(周卡 / 月卡 / 季卡 / 半年卡 / 年卡):换成该套餐的额度,天数在剩余时间上叠加
- 加量包:只增加每日数量,重复购买一直累加,不会被之后购买的时长套餐覆盖
- 单文件加强包:只提升单文件上限,不动每日数量
- 永久会员:一次买断,不再有到期时间
购买页会显示购买后的实际额度;买了不会带来任何提升的套餐会直接提示并拦下,不让用户白花钱。
按状态筛选、查看累计金额,每笔订单都能查询支付状态、补发权限或关闭,另有「清理未支付订单」一键清理废单。
后台「系统设置 – 文件上传设置」可以设置:
- 全站每日上传数量、单文件大小上限
- 每分钟上传次数
- 允许 / 禁止的文件类型、文件名关键词过滤
登录用户按账号统计,游客按来源地址统计。用户的权限可以在「用户管理」里单独调整,也可以通过购买套餐获得。
站点如果套了 Cloudflare 或其它反向代理,需要在「系统设置 – 用户 IP 地址设置」里选对获取方式,页面上会直接显示每种方式当前取到的地址,对照着选即可。
后台「系统设置 – 内容检测设置」可以对上传的 图片和视频 自动判定,三种引擎任选:阿里云内容安全、腾讯云内容安全,或 自建检测服务(在自己服务器上跑本地模型,文件不出服务器、没有调用费,部署见 tools/nsfw/README.md)。
判定结果分三档,不是简单的拦或不拦:
| 结果 | 文件状态 | 说明 |
|---|---|---|
| 放行 | 正常 | 低于转人工阈值 |
| 待人工 | 待审核 | 落在两个阈值之间,前台下载不了,等人工确认 |
| 已拦截 | 封禁 | 高于封禁阈值,同时记入违规公示(默认不公开,需人工确认后放出) |
留中间这一档是因为本地模型的误判率比商用接口高得多,一刀切封掉会天天误伤。
图片是上传请求里 同步 跑完的,几百毫秒无感。视频要抽帧,十几秒起步,所以是 异步 的:
- 上传完先挂起(前台显示「需审核通过后才能在线播放和下载」),抽帧打分在后台跑
- 跑完自动放行或封禁,不会卡住上传,也没有「先能下载、过一会儿突然被封」的窗口
- 判定口径和图片不同:够 N 帧命中才封(默认 2 帧),只命中 1 帧转人工——转场、肤色、泳装剧照都可能让某一帧飙到 0.9,只看最高分会误判到没法用
- 命中的那一帧会存成 证据帧,人工复核时直接看图,不用去播放器里找
- 检测服务万一挂了,超时会自动放行(默认 30 分钟),不会让视频永远卡在待审
视频检测需要服务器上有 ffmpeg,一键安装脚本会自动处理;没有 ffmpeg 时后台设置页会 直接标红提示,图片检测不受影响。
后台「内容检测记录」记录 每一个 检测过的文件,包括放行的——只看被拦下的,永远不知道 有多少该拦的漏了过去。页面上能看到评分、各模型明细、耗时、视频命中了哪几帧、最高分在第几秒,可以按结果和图片 / 视频分别筛选,也能就地把文件状态改成正常 / 封禁 / 待审。
面向合规场景,把已封禁文件的处理情况对外公开。
- 前台入口在导航栏「违规公示」,地址
/violation.php - 后台「文件管理」里封禁文件会自动生成公示记录,解封会自动撤下,批量操作同样生效
- 后台「系统设置 – 违规公示管理」可查看全部记录、修改文件名与备注、单条开关是否公示、手动补录或删除记录
- 支持一键导入历史已封禁文件
- 可在「网站信息设置」里关闭整个公示功能,并自定义公示页顶部的说明文字
公示页只输出脱敏信息:文件名打码、IP 只显示前两段,不输出文件哈希、下载链接或任何可访问地址。开启内容检测时,机器自动命中封禁的文件会留档但默认不公示,需人工确认后手动放出。
用户的覆盖上传和在线编辑都会改变已有链接背后的内容,后台「覆盖记录」用于复查这类改动。
- 记录覆盖前后的文件名、大小、格式,图片可直接预览新内容
- 记录操作者 UID / IP、时间和方式(覆盖上传 / 在线编辑)
- 显示该文件当前状态(正常 / 待审 / 已封禁 / 已删除)
- 每条记录可直接查看、封禁、删除文件、标记已复查或删除记录
- 默认只显示未复查的条目,页面顶部提示积压数量,支持一键全部标记已复查
- 可在「网站信息设置」里整个关闭:关闭后前台导航不显示入口、直接访问地址也会跳回首页,后台的「赞助名单管理」菜单同时隐藏,名单数据保留
- 赞助名单在后台「系统设置 – 赞助名单管理」维护
- 同一页面可配置微信、QQ 钱包、支付宝三张收款码,支持完整网址或相对
includes/sponsor/的路径;某一项留空则赞助页上不显示该收款方式 - 赞助页配色跟随站点当前外观主题
文件的对外链接使用独立的随机 token:
- 同一份内容被多人上传时,每个人都会得到独立的记录和独立的链接,各自的文件名、密码、隐藏设置互不影响,物理文件仍然只存一份
- 覆盖上传和在线编辑只会改变当前这一条记录指向的内容,不会连带修改其他人的文件
- 删除文件时,只有当没有任何记录再引用这份内容时,才会真正清理物理文件
| 存储类型 | 浏览器直传 | 直链下载 | 断点续传 |
|---|---|---|---|
| 本地存储 | – | – | 支持 |
| 阿里云 OSS | 支持 | 支持 | 支持 |
| 腾讯云 COS | 支持 | 支持 | 支持 |
| 华为云 OBS | 支持 | 支持 | 支持 |
| 又拍云 | 支持 | 支持 | – |
| 七牛云 | 支持 | 支持 | 支持 |
| 通用 S3 兼容存储 | 支持 | 支持 | 支持 |
| WebDAV | – | – | 支持 |
| OneDrive | – | 支持 | 支持 |
| OpenList / AList | – | 支持 | 支持 |
「浏览器直传」指文件由浏览器直接传给存储、不经过本站服务器;「直链下载」指下载时由本站 302 跳到存储自己的地址,不消耗本站流量。WebDAV、OneDrive 和 OpenList 的直传需要 PUT 或上传会话,和前端这套 POST 表单直传对不上,所以固定走网站中转。
后台「存储类型设置」页上,每种存储都有「连接测试」按钮:它用已保存的参数往存储里写一个几十字节的小文件,读回来核对后再删掉,一次跑通写、读、删三项权限。
文件表的每条记录都记着自己当初存到哪个存储(pre_file.storage),下载、预览、在线编辑、删除都按这个字段回到原存储去取,所以换存储只影响之后的新上传,已经上传的文件照常能下,外链也不会失效。存储卡片上会标出「N 个文件在此」,一眼能看出哪几份参数还在被老文件依赖。
换存储时要注意:
- 旧存储的参数原样留着别删。删了或者改错了,压在那儿的老文件就真的取不回来了——卡片上的数字就是提醒。
- 旧存储的服务不能停。老文件的流量仍然走旧存储,欠费、停机、删桶都会让它们下不下来。
- 秒传(同内容重复上传)会跟着已有记录指向同一个存储,不会把老内容再复制一份到新存储。
- 覆盖上传和在线编辑写的是 新内容,一律落到当前存储,该记录的
storage也会一并更新。 - 如果后台填了「文件下载域名」,而旧文件在阿里云 OSS / 腾讯云 COS / 华为云 OBS / 又拍云 / 七牛云这几家里,那个域名是给新存储绑的,拼出来的直链对不上;这种情况下旧文件会自动改走网站中转,内容一定对,只是多耗一点本站带宽。域名留空则不受影响。
程序目前不会把老文件搬到新存储,也就是说旧存储要一直留着。需要「搬完就退掉旧存储」的话得另做一个迁移工具。
后台「存储类型设置 → 多存储上传」可以一次开放几个存储,让用户在上传页自己挑存储位置,并且给每个存储限定谁能用。
| 配置项 | 说明 |
|---|---|
| 同时开放多个存储 | 总开关。关着的时候整套不生效,所有新文件都写到卡片里选中的那个存储 |
| 开放哪些、给谁用 | 每个存储可单独勾选开放,并选择门槛:所有人(含未登录访客)/ 仅登录用户 / 仅高级用户 |
「仅高级用户」指 level > 0 且权限还在有效期内的账号,判断规则和上传额度用的是同一套(is_user_permission_active())。
当前存储必开、且对所有人开放,这一行在后台是锁死的。它是兜底:用户没选、选了个不该他用的、或者池子配空了,都会落到它上面。它在上传页的下拉里也永远排第一、默认选中,这样「下拉的默认项」和「漏传参数时的兜底」是同一个,不会错位。
上传页只有在总开关打开、且当前访客够格用的存储不止一个时才显示「存储位置」下拉;只有一个时连框都不出,和单存储时的页面完全一样。
实现上有一处必须注意:目标存储在 pre_upload 那一刻就定死,并写进会话里的 upload_state 带到后续请求。因为浏览器直传是拿某个存储的密钥签好参数、由浏览器直接 POST 进那个桶的,一次上传又横跨 pre_upload / upload_part / complete_upload 好几个请求,中途重新计算目标就会出现「签的是 A、记录写的是 B」,或者分块被写进两个不同的存储。用户提交的存储名一律用 storage_pick() 拿允许列表校验,改请求参数指定不到没开放给自己的存储。
开了多存储之后,有几件事和单存储时不一样:
- 直传要给每个开放的存储都配好跨域(CORS),只配了一个的话,用户选到另一个会传不上去。选中的存储本身不支持直传(WebDAV / OneDrive / OpenList)时会自动改走网站中转。
- 秒传优先:站内已经有同样内容的文件时直接复用那一份,不会按用户选的存储再存一遍,这时用户选了什么就不作数了。
- 在线编辑保存 的新内容一律写到当前存储,不跟着原文件回原存储,记录的
storage会同步更新。 - API 上传接口(
api.php)没有存储参数,固定写当前存储。 - 「文件下载域名」全站只有一个值,只对当前存储生效;存在别的对象存储里的文件会自动改走网站中转。想让每个存储都走直链,把这个域名留空,各家用自己的默认域名。
通用 S3 使用 AWS Signature Version 4 签名协议,可用于 AWS S3、MinIO、Cloudflare R2、Backblaze B2,以及其他兼容 S3 API 的对象存储服务。
进入后台的「存储类型设置」,展开「通用 S3 兼容存储」,填写以下参数:
| 配置项 | 说明 |
|---|---|
| Access Key | 对象存储平台提供的访问密钥 ID |
| Secret Key | 对象存储平台提供的访问密钥密码 |
| Endpoint | S3 API 地址,需填写完整的 http:// 或 https:// 地址 |
| Region | Bucket 所在区域,例如 us-east-1;Cloudflare R2 通常填写 auto |
| Bucket | 存储桶名称 |
| 对象前缀 | 文件在 Bucket 内的目录前缀,默认是 file/;留空则使用根目录 |
| 地址风格 | 可选择虚拟主机风格 bucket.endpoint 或路径风格 endpoint/bucket |
常见配置提示:
- AWS S3:Endpoint 可填写对应区域的 S3 地址,Region 必须与 Bucket 实际区域一致
- MinIO:填写 MinIO API 地址和端口,通常选择「路径风格」
- Cloudflare R2:Endpoint 通常为
https://< 账户 ID>.r2.cloudflarestorage.com,Region 填写auto - Backblaze B2:填写平台提供的 S3 Endpoint,并使用该 Endpoint 对应的 Region
- 如果平台报 Bucket、域名或签名不匹配,可切换「地址风格」后重试
通用 S3 支持网站中转上传、POST Policy 浏览器直传、签名下载、断点下载、文件删除和文件信息读取。使用浏览器直传前,需要确认存储平台支持 S3 POST Policy,并为 Bucket 配置允许本站域名发起 POST 请求的 CORS 规则;部分平台不支持这种直传方式,此时请在后台选择「网站中转」。
适配坚果云、Nextcloud / ownCloud、Alist、群晖 WebDAV、Apache mod_dav 等标准 WebDAV 服务。
| 配置项 | 说明 |
|---|---|
| WebDAV 地址 | 服务商给的 WebDAV 根地址,例如坚果云 https://dav.jianguoyun.com/dav/、Nextcloud https:// 域名 /remote.php/dav/files/ 用户名 / |
| 账号 | WebDAV 账号 |
| 密码 | WebDAV 密码;坚果云要用「安全选项」里生成的 应用密码,不是登录密码 |
| 存储目录 | 相对根地址的子目录,留空默认为 file,目录不存在会自动创建 |
WebDAV 上传下载都经过本站服务器中转,因此本站的带宽就是网盘的实际速度上限。认证固定使用 Basic:CURLAUTH_ANY 会先发一次不带凭据的请求探路,服务端回 401 后 curl 需要把已经发出去的文件流倒回去重发,PUT 大文件时会直接失败。
支持个人版、商业版和世纪互联版(中国区)。
- 到 Azure 应用注册 新建一个应用
- 把后台「存储类型设置 → OneDrive」里显示的 回调地址 原样填进应用的「重定向 URI(Web)」,通常是
https:// 你的域名 /admin/set_stor.php - 在「API 权限」里加上
Files.ReadWrite.All和offline_access - 在「证书和密码」里生成客户端密码,复制 ** 值(Value)** 而不是密码 ID
- 回到后台填好账号类型、应用 ID、应用机密并保存,再点「获取授权」,跳转到微软登录页完成授权
授权拿到的 refresh_token 保存在配置表里,access_token 过期会自动续期,微软轮换的新 refresh_token 也会一并存下。上传走本站中转,超过 4MB 的文件自动改用上传会话分片上传(每片 10MB,失败的分片会重试两次,整个文件不用从头再来)。
下载可以选「直接链接」,本站会 302 到微软给的一小时临时地址,不消耗本站流量;代价是下载下来的文件名会变成站内的存储名(没有扩展名),在意文件名就选「网站中转」。
对接自建的 OpenList,同时兼容 AList v3 的接口。OpenList 后面挂什么盘(阿里云盘、百度网盘、OneDrive、本地磁盘、对象存储……)由它自己管,本站只跟它的 HTTP 接口打交道。
| 配置项 | 说明 |
|---|---|
| OpenList 地址 | 站点根地址,不要带 /api;自建没上 HTTPS 的要把 http:// 一起写上,例如 http://192.168.1.5:5244 |
| 账号 / 密码 | 登录用的账号密码,建议单独建一个只对存储目录有读写权限的用户,不要用 admin |
| 固定令牌 | 可不填。填了就直接拿它调接口,不再用账号密码登录;对应 OpenList 后台「其他设置」里的令牌 |
| 存储目录 | OpenList 里的完整路径,第一段必须是已经挂载好的存储名,例如挂载路径是 /aliyun 就填 /aliyun/pan/file;留空默认为 /pan/file,目录不存在会自动创建 |
用账号密码登录拿到的令牌缓存在配置表里,按 24 小时轮换(服务端默认签发 48 小时);令牌被服务端提前作废时(改过密码、重启清了会话)会自动重新登录一次再重发请求。
上传走本站中转(PUT /api/fs/put),因此本站带宽就是实际速度上限。下载可以选「直接链接」,本站先问 POST /api/fs/get 要到 raw_url 再 302 过去:底层是对象存储或网盘时会直接跳到上游地址,底层开了代理时跳的是 OpenList 自己的带签名地址。和 OneDrive 一样,直链下载拿到的文件名会变成站内的存储名(没有扩展名),在意文件名就选「网站中转」。
需要注意 OpenList 的接口不管成功失败 HTTP 状态码基本都是 200,真正的结果在响应体的 code 字段里,所以驱动一律解完 JSON 再判断成败。
- PHP >= 7.1,需启用 cURL 扩展
- MySQL / MariaDB
- 当前程序版本
VERSION为1628,数据库版本DB_VERSION为1022 - 视频检测还需要服务器上有 ffmpeg(自建检测服务的一键脚本会自动安装)
全新安装访问 install/ 目录按提示完成即可。
从旧版本升级时,覆盖程序文件后 必须 访问一次:
http(s):// 你的域名 /install/update.php
看到「网站数据库升级完成」即可。升级脚本会建表、补齐配置项,并把历史数据迁移到新结构。若跳过这一步,程序会因为数据库版本落后而提示「请先完成网站升级」。
静态资源的缓存串分两种,改代码时要注意区别:
assets/css/style.css、assets/css/admin.css、assets/js/buy.js用asset_ver(),取的是 文件修改时间(style.css?v=1756...)。改完传上去地址自动就变了,不用管。- 其余 JS(
layout-studio.js、layout-mac.js、layout-workspace.js、uploadnew.js、usercenter.js)和includes/ads.php用的是includes/common.php里的VERSION常量。改过这些文件就要把VERSION加一,否则浏览器和 CDN 会继续用旧文件。服务器开着 OPcache 的话(宝塔默认开),覆盖 PHP 文件后 要重启一次 PHP-FPM,否则会继续执行缓存里的旧代码。
- 外观扩展至 28 套(15 套配色型 + 13 套布局型,含 macOS 窗口风、渐变仪表盘风,以及蓝白工作台风一家七套),前后台、公告条、赞助页及弹窗联动
- 新增个人中心:额度与用量概览、我的文件管理(重命名 / 密码 / 公开私密 / 批量删除 / 复制外链)、订单记录、账号设置
- 新增账号绑定:一个账号可同时用邮箱和 QQ / 微信登录,注册时用的那种方式不可解绑
- 新增邮箱注册与登录,含算术验证码与发信记录
- 新增购买权限模块:套餐管理、支付宝当面付与易支付、订单记录与对账
- 新增邮件发信设置,支持 SMTP 与三种 HTTP API 通道,可测试发信
- 新增用户管理与权限设置,可单独设置每位用户的额度与有效期
- 新增覆盖上传功能及配套的后台审计界面
- 新增内容检测:图片同步检测、视频抽帧异步检测,支持阿里云 / 腾讯云 / 自建本地模型三种引擎,带独立的检测记录页和证据帧
- 新增违规文件公示功能
- 文件状态改为三态可切换(正常 / 封禁 / 待审核),文件管理和内容检测记录都能就地改
- 赞助名单可整体开关,关闭后前后台入口一并隐藏
- 新增广告公告位设置
- 新增在线查看文本内容与在线编辑功能
- 新增通用 S3 兼容存储,可对接 AWS S3、MinIO、Cloudflare R2、Backblaze B2 等平台
- 新增 WebDAV 存储,可对接坚果云、Nextcloud、Alist、群晖等
- 新增 OneDrive 存储,后台一键授权,支持个人版 / 商业版 / 世纪互联版
- 新增 OpenList 存储,可对接自建的 OpenList / AList 聚合网盘,兼容 AList v3 接口
- 存储不再是全站唯一:文件表记下每条记录存在哪个存储,换存储后旧文件仍从原存储读取,外链不失效
- 新增多存储上传:可同时开放多个存储供用户在上传页自选,并按所有人 / 仅登录用户 / 仅高级用户分级授权
- 存储类型设置页重做:卡片式选择、按能力显示传输方式、密钥默认打码、每种存储都能做连接测试
- 文件访问链接改为独立 token,同内容多次上传互不干扰
- 上传限制新增每分钟次数,并可配置反向代理下的真实 IP 获取方式
- 前后台界面整体美化与手机端适配






















































暂无评论内容