还算好看的网盘项目吧
起因很简单 想在自己服务器上放点文件 随时能拿到 市面上的网盘不是限速就是劝你开会员 要么塞一堆用不上的功能 索性自己写一个
于是有了 Nu0voCloudDisk 一个自托管的 Web 云盘 跑起来之后浏览器打开就能用 浏览 上传 下载 重命名 删除 新建文件夹都有 断点续传 移动端竖屏优化也做了
仓库放这儿 https://github.com/Nu0vo1212/Nu0voCloudDisk
界面长什么样
没用那种大图标卡片墙 而是 Windows 资源管理器那种窄行列表 一行一个文件 名字 大小 时间排开 文件多了往下翻也不会乱 整体是毛玻璃 / 液态玻璃的效果 背景图会透过来
背景图这块是多源竞速 同时向好几个图源发请求 谁先返回就用谁 返回的瞬间把其它请求全掐断 所以不用等最慢那个 也不怕某个源挂了
上传下载都带断点续传
这是我最在意的部分 毕竟家宽上传就那么点速度 传一半断掉重来会疯掉
- 下载支持
Range请求 正常返回206范围不对返回416断在哪就从哪续 - 上传拆成小块传 中途断了下次接着传 不用从头开始
手机上也能看
竖屏窄屏单独收了一版布局 间距收紧 字号调小 背景图按 9:16 裁切 不会因为一张桌面壁纸横在手机屏幕上而显得挤
登录是可选的
默认不带认证 打开就能用 想加也行 账号密码从外部配置读 不写进源码 优先级是
- 环境变量
AUTH_USER/AUTH_PASS - 可执行文件同目录放一个
.auth文件 内容用户名:密码比如Nu0vo1212:111212
两个都没配的话 认证自动关掉 免登录直接进
怎么跑起来
Windows 上源码直接跑
1 | node server-cjs.js |
默认 http://127.0.0.1:8097 文件根目录是项目里的 storage/ 第一次启动会自动建
本地开发想换端口和目录 走环境变量
1 | PORT=8097 HOST=127.0.0.1 ROOT_DIR=/path/to/dir node server-cjs.js |
Linux 那份单文件部署形态是另一套 端口固定 12345 监听 0.0.0.0 不收环境变量
打包成 Linux 单文件
1 | node build-linux.js |
产物是 dist/cd index.html 已经内嵌进去了 拷过去就能跑 不用装依赖
部署顺手写了个脚本
1 | python deploy-linux.py pre # 上传 + 网络命名空间预检(不碰线上) |
pre 那步是先把新版本丢进网络命名空间里试着跑一遍 确认没问题再动线上 省得手一抖把服务搞挂 提一句 脚本里服务器地址和凭据是硬编码的 我写的时候图省事直接写死了 你要用记得改成自己的
右键菜单和自绘 UI
交互上主要做了两处
- 右键菜单 空白处右键是新建文件夹 对着文件或目录右键是下载 重命名 删除
- UI 全自绘 对话框 确认框 输入框 堆叠式消息提示(3 秒自动消失) 没引任何 UI 框架
接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
首页 HTML |
| POST | /login |
登录 返回 token |
| GET | /auth-state |
查询是否开启认证 |
| GET | /files?dir= |
列目录 |
| GET | /file?file= |
下载(支持 Range 断点续传) |
| GET/POST | /upload |
上传(probe / 分块 / finish) |
| POST | /mkdir?dir=&name= |
新建文件夹 |
| POST | /delete?path= |
删除 |
| POST | /rename?old=&new= |
重命名 |
| GET | /bgimg |
背景图(多源竞速) |
技术栈
- Node.js 没有第三方运行时依赖 连
npm install都不用 - 前端就一个
index.html内联 CSS / JS 图标是 Lucide 的内联 SVG - 单文件打包用 Node 的 SEA + postject
许可
GPLv3
有想自托管网盘的可以直接拿去用