今天开始放暑假了,我决定趁暑假编写我的第一个开源项目:一个定位类似 Alist 的个人网盘(或者叫文件管理系统?),我给它起名叫 Aelion。
为什么要写开源项目?我期末的时候找了一个月的实习,海投中大厂,但是没有人鸟我,甚至连一个面试都没捞到,不知道是因为我太菜还是因为我是 27 届。而我又不想去小厂,那就不找了,回家!
为什么要写网盘?在我还没上大学的时候,我就经常自己建一些网站玩。那时候我特别喜欢一个叫 cloudreve 的网盘项目( https://github.com/cloudreve/cloudreve ),期待着以后自己也能写出这么牛逼的项目。既然决定写一个开源项目,那就完成这个愿望吧。
为什么叫 Aelion?因为我想写的是类似于 Alist 的个人向网盘,在起名的时候,我看着 Alist 的名字,想到了一个很喜欢的形象,是 wlop 老师创作的风之女神 Aeolian,于是决定小改一下,叫 Aelion。
关于开发计划,我希望先实现网盘的核心功能以及一些其他项目没有的特色功能,随后再对一些可插拔式的功能慢慢开发。在我的理解中,我将网盘划分为以下几个大的模块:
对外接口:用户与网盘交互的接口,比如 HTTP、webdav、S3 等。
文件处理:上传、下载、基础文件系统操作(目录系统、删除、重命名等)、预览、搜索等。
存储策略:包括本地、节点、各类对象存储等。
在 Alist 和 Cloudreve 已经发展了好几年的基础上,这个计划看起来像重复造轮子(虽然事实上好像就是),但我做这个项目也有其意义。首先,我可以摸清网盘系统的每个细节,自己参与到全链路的开发中,我认为这种摸清整个业务场景的经历是很有利于我的发展的。然后,在两位巨人的肩膀上,我也可以做出很多改进。
在项目的第一个测试版本中,我希望实现最基本的功能,即简易的注册登录、基础的上传下载删除等、本地存储策略与文件系统实现、初具人形的前端。
随着项目的发展,我希望后期实现:
-
完善的注册登录系统,包括邮箱、手机号、CAPTCHA等。
-
完善的权限系统,包括用户组、用户组权限、文件权限、文件权限预设等。
-
和 cloudreve 一样完善的文件操作,包括断点续传、打包下载、在线压缩解压、在线预览、在线编辑(包括文本文件、Office、draw.io等)、获取直链、分享、转存等。
-
和 Alist 一样丰富的存储策略,同时对外支持 webdav、S3 等。
-
比 cloudreve 更好看的前端,实现多个平台的客户端。
-
完善的文档。
同时,在最近使用 Trae、cursor 等 AI IDE 时,我萌生了给网盘添加一些 AI 相关功能的想法。比如用自然语言搜索文件(如:“我的最新版简历”),同时可以直接在网盘系统中进行 chat,好处是可以直接将网盘内文件或目录添加到上下文(比如 IDE 中将目录添加到上下文)。或许还可以实现一些 MCP 功能,有很多方向可以探索。