被 Alist 网页版折磨了大半年,我干脆自己写了个网盘客户端
先说清楚:这不是一篇骂 Alist 的文章。Alist 是一个相当优秀的开源项目,把几十种存储统一到一个界面里,配置灵活、部署简单。我想聊的是另一件事——一个「管理后台」,和一个「天天要用的工具」,中间差着什么。
一、一切的起点:文件都在服务器上
我的文件基本都在自己的服务器和 NAS 上。文档、课程资料、录屏、镜像包、还有一堆懒得整理的照片,全堆在上面。
用 SMB 挂载?在家里局域网还行,出门就没了。用某个公有网盘?几个 T 的数据传上去,先不说速度,光是「数据在别人服务器上」这一条我就过不去。
所以最初的选择很自然:Alist。
一个 Docker 起来,把本地目录挂上,浏览器打开就是文件列表,能看能下能传。那会儿我觉得这事儿已经解决了。
用了两周之后,我发现问题不在「能不能打开」,而在**「打开之后有多难受」**。
二、网页版当网盘用,卡在六个地方
1. 浏览器天生不是传文件的工具
这是最要命的一条。
上传一个 4 GB 的镜像包,进度条爬到 92%,我不小心按了下 F5,页面刷新——进度归零,从头再来。
这不是 Alist 的锅,是浏览器的锅。HTTP 表单上传本身就没有断点续传的概念,页面一卸载,连接断了,之前传的全白费。
被这样搞了三次之后,我传大文件之前会先把标签页锁住,不敢碰任何东西。一个网盘工具,用起来像在拆炸弹。
2. 下载交给浏览器 = 交出控制权
点下载,文件进了浏览器的下载管理器。然后你失去了一切:
- 想把三个任务排个队?不行,浏览器一起下
- 想暂停一个、先下另一个?可以暂停,但恢复经常从头开始
- 想知道下到哪了、还剩多久?下载管理器那点信息,聊胜于无
- 下了十个文件,哪个是哪个?全靠文件名猜
浏览器下载器是为「下个 PDF」设计的,不是为「同步一整个学期的资料」设计的。
3. 目录树不在左边
网页版的文件管理逻辑是「点进去、看完、点返回」。
路径一深,比如 /课程/大三上/操作系统/实验三/源码/,你就得靠面包屑一级一级点回来。想顺手看一眼隔壁文件夹?退三级,再进两级。
桌面端文件管理器的核心优势是什么?左侧目录树永远在那儿,点一下就切。 这个体验网页版给不了。
4. 视频只能「看」,不能「用」
在网页里点开一个视频,然后:
- 没有倍速(我复盘录屏基本都 1.5× 起)
- 全屏是「网页全屏」,不是真全屏
- 拖进度条要重新缓冲,拖到哪卡到哪
- 想同时看两个视频对比?开两个标签页,各自缓冲
网课录屏、会议回放,这类文件用网页播放器看,纯粹是折磨。
5. 批量操作全靠手点
要传一个包含 200 个文件的文件夹:
- 一个个选?点到手抽筋
- 整个文件夹拖进去?可以,但只要有一个文件失败,你不知道是哪个,也不知道怎么单独重试
而且上传失败之后没有队列——你不知道后台还有几个在跑、哪个卡住了、哪个已经死了。
6. 每次打开都要重新找路
关掉标签页,下次再打开,登录状态可能没了,上次浏览到哪个目录也忘了,又得从根目录一层层点进去。
它是个工具,但它不记得你在干什么。
三、那我到底需要一个什么东西
把上面六条反过来写,就是需求:
- 传输要能断点续传,中断了能接着走
- 下载要能排队、暂停、重试,一个面板管完
- 目录树常驻在左边,随时切
- 视频要能真全屏、倍速、随便拖
- 文件夹要能整包传,两端目录自动建好
- 打开就是上次的样子
一句话总结:把网盘做得像本地文件夹一样快。
于是我决定自己写一个客户端。名字就叫湘网网盘。

四、设计上做的几个决定
左侧七个板块,常驻不折叠
文件、传输、图片、视频、文档、回收站、设置——七个入口固定在左边,任何时候都能一键切过去。
为什么把「传输」单独拎出来当一个板块?因为传输是网盘里唯一需要持续观察的动作。你上传 500 个文件,最想知道的就是「还剩多少、哪个卡了」。把它藏进一个小弹窗里,等于让人反复去点。
列表和网格双视图,文件夹永远排前面
选文件的时候看缩略图,找文件的时候看列表,两种模式各有用处。排序支持按名称、按大小,搜索是全局的——不用先退到根目录再搜。
还有个小细节:Alt + ← / → 切前后目录。用惯了资源管理器的人,手指会自己去找这两个键。
在线即看,但不止于「看」
图片、视频、文本直接预览,不下载。视频支持真全屏(F 键)、Esc 退出、空格暂停、进度条任意拖动。
这块花的时间比预想多得多——「能播放」和「能当播放器用」是两个完全不同的工程量。

五、真正花时间的四个技术点
1. 目录秒开
刚做出来的时候,每进一个目录都要转圈一到两秒。原因很简单:等接口返回,再渲染列表。
后来改成三段式:进目录先渲染骨架 → 同时请求列表 → 数据回来替换。再配合上一层目录的列表缓存和子目录预取,「点进去」这个动作在体感上就消失了。
用户感知的「快」,很多时候不是真的快,是没有空白。
2. 断点续传
大文件不能整包传,要切成块。
每一块独立上传,服务端按块的偏移量写入;本地维护一份传输记录,记着「这个文件已经完成到第几块」。中断之后重新开始,先读记录,从断点那块继续。
再往上加一层:块级重试。某一块因为网络抖动失败,只重传那一块,而不是整个文件重来。这就是为什么网络不好的时候,进度条会停一下然后继续爬,而不是直接归零。
3. 视频播放
要让视频能拖动,就得支持按需分段加载(HTTP Range)。拖到 80% 的时候,只请求那一段,而不是从头下载。
真全屏、倍速、快捷键这些反而是简单的部分——难的是让「拖动进度条」这个动作不卡。
4. 传输队列
并发、暂停、恢复、失败重试、清空——每个任务都有明确的状态机。
这里最容易出的 bug 是状态错乱:任务 A 已经暂停了,但它的网络请求还在跑;任务 B 重试了三次,界面显示还是「传输中」。所以队列不是「一个列表 + 几个按钮」,而是一套要经得起折腾的状态管理。
六、现在的样子
- 版本:v1.2.0
- 平台:Windows 10 / 11 64 位
- 安装包:10.6 MB
- 两种安装方式:安装包(注册快捷方式、可正常卸载)和免安装 ZIP(解压即用,可以扔 U 盘里)
- 打开就能用,不需要配置服务器地址——登录账号,剩下的它自己连
官网在 pan.xwlemd.com,网页版也保留了,临时用别人的电脑或者手机,直接在浏览器里打开就行。
七、最后一点想法
做完这个客户端,我对「网页版 vs 客户端」这件事的看法变了一点。
以前我觉得客户端是历史包袱,什么都往浏览器里塞才是趋势。现在我觉得这俩根本不是替代关系,是场景关系:
- 临时用一下、跨设备、不想装东西 → 网页版赢
- 长期用、大文件、要稳定 → 客户端赢
浏览器擅长「打开就能用」,不擅长「持续地、可靠地搬数据」。而网盘这个场景,本质就是搬数据。
所以湘网网盘两个都做了:网页版负责「随时随地能打开」,客户端负责「坐下来认真干活」。
如果你也在用自己的服务器当网盘,被网页版折腾过,可以试试看。有问题直接找我,改起来很快——毕竟这就是我自己每天在用的东西。
湘网网盘 · 你的私有云盘,即装即用
官网:https://pan.xwlemd.com
数据只存在你自己的服务器上,不经过任何第三方。


