个人与小型团队日常有大量文件需要在多设备之间流转,而市面上的公有网盘普遍存在下载限速、容量收费、隐私不可控等问题。本项目目标是自建一套轻量、可控的在线文件存储与分享服务:打开浏览器即可使用,无需安装任何客户端,同时对文件所有权与访问链路做到完全自主可控。
核心功能模块
账号体系 —— 手机号验证码注册与登录,密码在前端加密后传输,服务端不可逆存储。
文件管理 —— 列表 / 网格双视图切换,图片与视频在列表中直接呈现内容预览;支持上传、下载、预览、重命名、移动、删除,以及多选批量操作。
上传通道 —— 大文件自动分片上传并支持断点续传;接入对象存储后自动切换为签名直传模式,单文件上限 5GB。
分享体系 —— 文件与文件夹均可生成带提取密码、带有效期的分享链接,支持单条撤销与统一管理。
在线编辑 —— 纯文本类文件(txt / md / json / csv / yml 等)可在网页内直接修改并保存,无需下载到本地。
客服中心 —— 内置智能客服与人工转接通道,支持未登录状态直接咨询。
站点与合规 —— 用户服务协议、隐私政策、同意确认闸门、添加到手机桌面(PWA)。
业务流程与功能路径
用户手机号注册登录 → 进入文件页 → 上传(点击按钮 / 拖拽文件 / 手机端悬浮加号三种入口)→ 文件落入列表并以真实内容作为预览 → 鼠标悬停或选中文件后,行内出现下载/分享/移动/重命名/删除操作 → 进入多选模式后可批量移动、批量分享、批量删除 → 生成的分享链接可被他人凭提取密码访问,且永久不会被搜索引擎收录。
采用「前端单页 + 后端接口 + 存储抽象层」三层结构。前端不与数据库直连,全部通过统一的 JSON 接口交互;后端按职责拆分为公共层、业务接口、存储层、短信、客服等独立模块,单个模块出问题不会波及整站。存储层做了抽象封装,业务代码不感知文件的实际存放位置,可在「本地磁盘」与「对象存储」之间一键切换,便于从零成本试运行平滑迁移到云端。
各模块技术栈
后端:PHP 8 + MySQL(PDO 预处理),无框架原生实现
前端:原生 JavaScript(零第三方库)+ 原生 CSS 响应式,用 WebCrypto 承担 RSA-OAEP 传输加密
存储:自研存储抽象层,对接阿里云 OSS(自研签名算法,不依赖官方 SDK)
短信:阿里云号码认证服务,自研 HMAC-SHA1 签名
客服:DeepSeek 大模型接口 + 服务端规则兜底
运维:虚拟主机部署、SSL 证书全流程、对象存储跨域与 RAM 权限配置
我负责的模块和结果(量化)
独立完成从需求梳理、交互设计、前后端开发到部署上线的全部工作,累计 15,932 行代码、21 个源文件(后端 PHP 约 583KB,前端 JS + CSS 约 68.5KB),数据库 4 张表,对外提供 63 个后端接口(业务接口 41 个 + 客服接口 22 个)。
单文件支持 5GB,上传走 1MB 分片并支持断点续传;
上传通道实现「本地分片中转」与「对象存储签名直传」双模式,直传模式下服务端出口流量为零,彻底绕开主机带宽瓶颈;
列表页图片采用懒加载,视频加载元数据,首屏不因大图卡顿;
短信接口按「号码 / 网络 / 全站」三级限流(同号 5 次每小时、8 次每天;全站 150 次每天),把短信成本锁定在每日明确上限内;
自建故障诊断页,覆盖状态检查、响应头检查、孤儿文件清理、短信连通测试、限流解除等 7 个动作,线上排障不再依赖主机面板;
移动端完成从「文件名被挤到 61px」到「245px 完整显示」的布局重构,操作方式改为触屏友好的「选中即出操作」。大文件上传受主机带宽限制 —— 主机出口带宽小,走服务器中转大文件必然超时。解决方案:实现签名直传,前端向服务端申请一次性签名后直接上传至对象存储,服务端只负责鉴权与登记,彻底绕开主机带宽瓶颈。
对象存储中文文件名下载报错 —— 带中文名的对象在附加下载参数后会被拒绝访问。解决方案:改为在服务端生成签名链接时统一处理文件名编码,不再依赖响应头传递文件名,问题彻底消除。
前端资源强缓存导致改了代码用户仍看到旧版本 —— 移动端尤其明显。解决方案:静态资源引用统一携带版本号,版本号与代码改动同步递增,发布即生效。
移动端弹层高度不可靠 —— 使用百分比高度时,移动端地址栏伸缩会造成面板被截断或超出屏幕。解决方案:改用视口锚定 + 动态视口单位,并监听可视视口变化实时