用 Alist 的人多半遇到过同一个尴尬:库挂得挺漂亮,目录结构也理好了,可真要往里放一个文件——找不到上传的地方。Alist 的主线是「展示你已有的存储」,写操作一直不是它的重点。
toalist 就是补这个口子的。一句话概括:一个 Go 写的小程序,站在 Alist 前面接文件,然后把文件转交给 Alist 落盘。项目是 lovebai/toalist,MIT 协议,59 星、6 fork,2025 年 6 月建仓,年底之后没再有大动作。
一、三样东西的分工
它把自己定位成 Alist 的「前置应用」,但它也能不依赖 Alist 单独跑——这两种模式是理解它的关键。
对接 Alist 时,文件流是这样走的:客户端把文件 POST 给 toalist,toalist 做完校验,按你配置的方式(表单上传或流式上传)转给 Alist 的 API,Alist 再落到你在它那里指定的目录。你现在浏览器里打开的是 toalist 的上传页,看到文件列表的地方还是 Alist。
local 模式下,它谁都不用,文件直接写进程序自己目录下的文件夹,配一个简易文件管理页就能看。这个模式不需要 Alist,也不需要数据库——一个二进制、一个配置文件,就是一套自建图床。
第三种是「代理模式」:打开这个开关后,下载文件的流量也要从 toalist 过一道。好处很实在——后端 Alist 可以完全不暴露在公网,只让 toalist 对外。代价也清楚:这台机器要扛全部下载流量,带宽和 CPU 都算它的。
二、上传要过五道关
它的上传接口就是一个标准 HTTP 接口,路径固定,参数是文件和签名。真正决定「谁能传、能传什么」的,是配置文件里这几个值:
- 签名:请求里带一个约定的值,对不上就拒。
- 后缀白名单:只放行你写进去的类型。默认给了一串,从图片到压缩包、视频都有。如果只当图床用,就该把它收窄到图片格式,否则你的域名迟早被人当免费文件柜。
- 大小上限:单位是 MB,默认 50。这一项要注意配合前置的网关一起改,不然请求会先被网关拦下来,报的错还看不懂。
- 重名策略:保留原名,还是自动加后缀避免覆盖。批量传截图的时候,这一项决定你是丢文件还是留一堆同名副本。
- 落地方向:表单上传、流式上传,或者存本地。README 推荐表单上传,大文件用流式更省内存。
这里有个必须自己处理的点:README 的示例配置里,签名写的是一个固定的明文短语,配进客户端就能直接用。这意味着任何拿到接口地址和这个值的人,都能往你的库里塞文件。自己电脑上玩无所谓,一旦这个地址被扫到,第一件该做的事就是把这个值换掉。
三、它真正的实用性在「当图床」
这个项目最讨巧的地方,是把上传做成了标准表单接口,于是所有主流的截图上传工具都能接:
- PicGo / PicList:README 直接给了 JSON 配置片段,填接口地址、表单字段名、返回值的取值路径即可。剪完图按快捷键,链接直接进剪贴板。
- ShareX:同样给了一份 JSON,指定请求方式、表单参数和返回 URL 的路径。
- 自己写脚本:只要是能 POST 表单的东西都行。
这条路径的价值在于闭环很短:截图 → 自动上传 → 拿到链接 → 粘进文档。不需要注册任何第三方图床,也不需要担心哪天图床关停、老文章里的图全挂。
上图是上传完成后在 Alist 里看到的结果。文件确实进去了,剩下的展示、挂载、分享都还是 Alist 的活。
四、部署:四种方式,选一种
作者把安装方式铺得比较全:Windows 下解压运行 exe;Linux 和 macOS 给的是可执行文件加压缩包;要常驻就跑成系统服务(Linux 用 systemd,Windows 用 NSSM),README 里连服务单元文件的内容都写好了;不想碰这些就直接上 Docker,镜像在 GitHub 容器仓库和 Docker Hub 上各有一份,端口 5245,需要挂两个目录——一个放配置,一个放本地文件。
配置文件是 ini 格式,第一次运行如果没建,程序会自己生成一份默认的。改完必须重启服务才生效——这一条 README 特意加粗了,因为很多人改完配置发现没变化,以为是程序的问题。
还有两个密码要自己生成:本地文件管理页的登录密码,和 Alist 的密码。程序本身带命令行参数可以把明文转成对应的哈希或密文,把输出粘回配置里就行。也就是说,配置文件里不会出现明文密码,这一点做得比不少同类小工具规矩。
五、它的边界
这是一个 59 星、单人维护的小项目,把期待值放对位置比较重要:
- 它没有账号体系。local 模式下的那个登录只管简易文件管理页,不是给上传接口做权限的。想按用户分配上传权限,它做不到。
- 它不做存储。落盘是 Alist 或本地磁盘的事,它只负责「转交」。所以别指望它解决存储扩容、去重、秒传这些问题。
- 它对 Alist 有版本依赖。接口是照着 Alist 的 API 写的,Alist 大改版时它不一定跟得上。README 里也提到过某个版本之后静态资源改成本地化,想用 CDN 就退回旧版本——这类细节说明它还在跟着上游走。
- 维护节奏偏慢。2025 年底之后基本没新提交。功能是够用的,但别指望遇到问题能很快修。
六、适合谁
适合:已经在用 Alist、需要一个顺手上传入口的人;想自建图床、又不想为了一个上传功能装整套博客或网盘的人;需要给非技术同事一个「打开网页就能传文件」的界面的人。
不适合:需要多用户、细粒度权限的团队;要传超大文件、要求断点续传的场景;以及完全不想碰配置文件的人——虽然它界面简单,但模式切换、密码生成、代理开关这些还是要改 ini。
说到底,这是一个定位极窄但切得准的工具。它不试图成为网盘,也不跟 Alist 抢活,只把「往 Alist 里放文件」这一件事做成一个干净的接口加一个干净的页面。对于已经有 Alist 的人来说,这恰好是缺的那一块。
本文根据项目公开仓库 lovebai/toalist 的 README 与默认配置说明整理撰写。第三张配图为仓库 README 所附官方截图(Alist 文件列表),前两张为依据配置项与请求流程自绘。文中星标数、许可协议、端口与默认配置值均为撰写时仓库所载,项目更新较慢,请以仓库当前状态为准。本文不含外链入口与推广内容。
本文整理自公开资料并做重写,原始出处:https://github.com/lovebai/toalist。文中配图已去除站点叠加水印与推广信息;版权归原作者所有。


