这是一个Windows页面风格的个人网盘,支持普通文本、文档、表格、xmind等在线编辑,支持Windows的小组件,例如计算器、WhiteBoard、python 等,其他更多功能待你来发现,也待你来开发。
为什么要做这个网盘?因为现在的商用网盘收费太高,个人文件存在别人的服务器上也不安全。而现在一些开源的个人网盘,例如NextDown、可道云等,用起来感觉很卡,而且"闭源",想增加功能很难。因此我就自己做一个网盘,并增加了很多其他功能,现已完全开源。
介绍
已实现的功能
- 文件夹的新建、删除、重命名、移动、导出
- 文件上传、下载、新建、删除、移动、重命名、分享
- txt、markdown、表格、文档的在线预览和编辑功能
- 支持 xmind 文件在线预览和编辑
- 支持 python 脚本在线编辑和运行
- 支持远程连接 Linux 服务器
- 不同用户的数据完全隔离
- 可任意挂载多个磁盘
技术选型
- 后端框架:FastApi
- 数据库:SQLite3 or MySQL
- 前端:原生 html + js + css
实现方案
文件和文件夹的层级结构维护在数据库中,这样在页面查询列表时,只需要查询数据库就可以了,速度会快很多;同时数据库中的文件和文件夹的层级结构也全部真实的映射到磁盘里,所见即所得,便于以后你不想用这个系统了,它也保留完整有序的文件,而不是乱序的。
- 查询文件和文件夹时,直接在数据库中查询,可以非常方便的进行过滤和排序,只有在读写文件和文件夹时,才会和磁盘交互,有效的降低了磁盘IO。
- 所有文件和文件夹的数据通过 id 查询,页面上只能看到相对路径,完全隐藏了本地真实的文件路径。
- 可以很方便的"挂载"磁盘,只需要在配置文件中将新磁盘配置上就行了。
- 搭配大家都熟悉的 Windows 文件系统的页面交互(来源Windows12概念图),前端页面使用的是这个作者tjy-gitnub的开源项目,非常感谢作者。我只是在这个项目的基础上进行了大量的增删(删除了大量的静态代码和缓存数据的代码,提高了整个页面的加载速度,并把大量的功能变成真实有用的功能)。
页面
登录页面
登录页面的背景图是可以换的
桌面
桌面的背景图也是可以换的
任务栏
任务栏采用的是居中展示的样式,Windows11以后应该都是这个样式
文件资源管理器
上边一排工具栏依次是新建文件、新建文件夹、重命名、移动、复制、上传、下载、分享、删除,这些图标均来源Windows10的系统图标。文件列表可按照名称、创建时间、修改时间排序。文件 资源管理器中的所有文件,除了支持在线编辑的文件外,其他格式的文件会直接用浏览器打开,浏览器能打开预览的文件可以直接在浏览器中预览,浏览器不支持的文件则直接下载到本地。
使用文件上传功能上传文件时,会首先检测网盘是否存在相同的文件,如果存在则不上传,这就是类似一些网盘的秒传的功能。
回收站
上边一排工具栏依次是还原文件、删除文件、清空回收站,基本上和Windows系统的回收站操作一样。
我的分享
当分享文件时,可设置分享链接的打开次数,超过次数会返回 Nginx 默认页面。其中:markdown、表格、文档 和 xmind 分享链接打开后页面虽然可以编辑,但数据不会保存,仅支持导出数据。
分享功能的常规使用场景是分享文件给别人,还要一个场景就是去打印店打印文档,通过浏览器调用打印机后,刷新页面到指定的次数,这个链接就失效了,有效降低了文档泄漏的风险和使用U盘被病毒感染的风险。
设置
支持修改密码、退出登陆、上传桌面背景图片、设置主题、播放本地视频、ssh。
计算器
一个感觉很鸡肋的小工具,感觉还不如用 python 命令行计算。
Whiteboard
没事可以用鼠标涂鸦画画,放松一下。
连接 Linux
首先需要设置服务器连接信息,然后就可以直接在浏览器上打开页面连接 Linux 服务器;支持上传文件到服务器,或者下载文件到本地。为了提供更好的使用体验,提供了 Ctrl+C(复制)和 Ctrl+V(粘贴)快捷键,不仅如此,还仍然保留了 Ctrl+C 快捷键终止前台进程的功能。为节省服务器资源,对"挂机"超过10分钟的连接进行关闭。
播放本地视频
播放本地视频,不消耗流量。为什么会做这个功能,因为我的手机上没有安装任何视频播放软件,只能用相册自带的功能播放视频,但相册自带的功能不支持记录视频播放进度,如果手误碰退出视频,则又会重头开始播放。所以这个功能就是用来记录视频播放进度的。
python命令行
支持 python 命令行,支持导入 python 官方库,可以用来做一些简单的计算,或者处理一些简单的数据。
在线编辑功能
所有在线编辑功能:每隔10秒自动保存,标题栏文件名旁会展示自动保存的时间,点击关闭按钮也会自动保存。其中txt
、markdown
和文档
的在线编辑支持导出成html
格式,用浏览器打开导出的html
后,可通过浏览器自带的打印功能把文件转成PDF
格式。
txt 文件
点击右上角的下载按钮,可以直接将当前文档转成 html,并下载。如需下载原 txt文件,可在文件资源管理器中选中文件并点击下载。
markdown 文件
点击右上角的下载按钮,可以直接将当前文档转成 html,并在新标签页打开,如需下载这个 html,可在新打开的标签页右键下载。需要注意:这里使用的是第三方工具转的html,一些样式在转换时会丢失。如需保留所有的html样式,可在工具栏点击全窗口预览HTML
即可。
表格
由于表格功能太多,暂不支持导出功能,可用于在线存储一些数据,可手动复制表格中的数据,并粘贴到本地 excel 表格中。
文档
该文档左侧带有目录,支持目录定位页面到指定位置。可导出成 html 格式的文件,用浏览器打开 html 文件,调用浏览器自带的打印功能,调整打印页边距,可把文档转成页面布局合适的 PDF 文件。
xmind 脑图
支持标准的 xmind
文件(xmind8
和 xmind zen(xmind 2020)
)在线编辑,文件打开后,原文件格式已经转换,只能通过页面工具栏中的导出功能才能导出 xmind8
(只支持导出 xmind8
,不支持导出 xmind zen
)。在线编辑的脑图中添加的样式、颜色、优先级、完成进度、备注等也支持导出到 xmind8
中,更多功能请看下面图片中的内容。亲测文件打开速度比 xmind8 快很多。
python 脚本
支持在线编辑 py 文件,点击运行后可直接在浏览器上看到结果。如果想导入第三方库,需要专门打包,具体可查阅相关资料。
其他
1、因为是在操作本地文件,所以不支持集群部署和分布式存储,如需集群部署和分布式存储,可查看我的另一个项目;
2、登录页面的背景图片的路径是web/img/pictures/undefined/background.jpg
,如需修改登录背景图片,可直接替换掉这个图片即可,注意:图片名必须是background.jpg
;
3、所有页面已经尽可能的适配手机端了。使用手机浏览器打开,横屏展示,整体使用体验还是不错的;
部署
最经典的前后端分离的部署架构,整个项目部署非常简单,详见项目文件夹中的 README.md。
推荐部署方案
- 带公网IP的云服务器,买云服务器的钱比开网盘的VIP会员的钱要便宜的多得多,而且有公网IP,还可以干其他很多有趣的事情;
- 树莓派,用于部署网盘服务,可根据自己的需求买对应配置的树莓派,500元左右就可以买一个差不多配置的树莓派了,咸鱼上会更便宜。树莓派 24h 开机,一个星期的耗电量大约不到1度电;高配置的树莓派还可以用来当电脑、电视、机顶盒用哦,就看你的动手能力有多强了;
- 硬盘,自己可以买一个几T的机械硬盘存储数据,现在机械硬盘也很便宜;土豪可以用固态硬盘,也不是很贵;
- 内网穿透,在云服务器和树莓派上分别部署内网穿透软件即可,推荐使用 frp 进行内网穿透;
可选部署方案
- 树莓派 + 硬盘;
- 公网IP,可以让宽带运营商给你一个固定/动态的公网IP(IPv4就不用想了,运营商肯定不会给,可以使用IPv6);
- 域名,由于IPv6很难记,所以还需要购买一个域名(便宜的域名一年也就不到8元);
- 动态域名解析,宽带运营商如果给你一个固定的公网IP,那样就很不安全,动态公网IP会安全一些,这就需要动态域名解析;
其他部署
如果你没有随时随地使用的需求,只是在局域网内用着玩,那你就随便找个电脑部署就行了;
以上你就拥有了个人网盘,保护个人数据安全;不仅如此,你还可以自己开发,扩展功能。
项目地址
项目地址: https://github.com/leeyoshinari/OneDrive,欢迎使用,欢迎 Star。