← 返回

还算好看的网盘项目吧

2026/09/28 21:16 技术 技术

起因很简单 想在自己服务器上放点文件 随时能拿到 市面上的网盘不是限速就是劝你开会员 要么塞一堆用不上的功能 索性自己写一个

于是有了 Nu0voCloudDisk 一个自托管的 Web 云盘 跑起来之后浏览器打开就能用 浏览 上传 下载 重命名 删除 新建文件夹都有 断点续传 移动端竖屏优化也做了

仓库放这儿 https://github.com/Nu0vo1212/Nu0voCloudDisk

界面长什么样

没用那种大图标卡片墙 而是 Windows 资源管理器那种窄行列表 一行一个文件 名字 大小 时间排开 文件多了往下翻也不会乱 整体是毛玻璃 / 液态玻璃的效果 背景图会透过来

背景图这块是多源竞速 同时向好几个图源发请求 谁先返回就用谁 返回的瞬间把其它请求全掐断 所以不用等最慢那个 也不怕某个源挂了

上传下载都带断点续传

这是我最在意的部分 毕竟家宽上传就那么点速度 传一半断掉重来会疯掉

  • 下载支持 Range 请求 正常返回 206 范围不对返回 416 断在哪就从哪续
  • 上传拆成小块传 中途断了下次接着传 不用从头开始

手机上也能看

竖屏窄屏单独收了一版布局 间距收紧 字号调小 背景图按 9:16 裁切 不会因为一张桌面壁纸横在手机屏幕上而显得挤

登录是可选的

默认不带认证 打开就能用 想加也行 账号密码从外部配置读 不写进源码 优先级是

  1. 环境变量 AUTH_USER / AUTH_PASS
  2. 可执行文件同目录放一个 .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
2
python deploy-linux.py pre     # 上传 + 网络命名空间预检(不碰线上)
python deploy-linux.py swap # 替换并重启

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

代码在这儿

有想自托管网盘的可以直接拿去用