<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <blockquote>
讯享网
| @Author:TTODS
前言
本人因学习需要租了一台Liunx云服务器,为了充分利用这台云服务器,我在上面搭建了一个个人文件服务器。
它的主要用途:
- 可以将一些不常用但有用的文件丢到该服务器上吃灰,填出自己电脑上的磁盘空间
- 从个人的角度出发,由于自己电脑上有些环境没有配置,有些课程需要用到学校机房的电脑。这时就可以用该服务器来存储实验课的代码和数据,实验课开始时从服务器上取出上次上传的代码,结束后再上传新的代码上去。
系统主页截图:

讯享网
功能模块简介
本系统的功能分为三个模块:文件管理、权限与安全和日志统计
文件管理
- 实现文件的上传、下载、预览功能。
- 为了避免用户误删文件导致文件丢出造成严重后果,还实现了回收站功能。
权限与安全
- 使用请求拦截器对用户请求进行权限验证。
- 使用基于TimedCache(定时缓存)和ip地址的登录保护,防止黑客恶意暴力激活成功教程密码。
日志统计
- 对用户的操作进行日志统计。
功能的具体实现
文件管理
在springboot的配置文件中除了常规的端口、数据源、日志配置外,还需配置文件服务器的根路径和回收站的根路径
讯享网
然后在Controller层中使用注解获取配置的属性
上传功能
根据请求提交的参数,拼接出目标文件夹的路径,然后将上传的文件保存到该目录下。这里有一个小细节就是如果该目录下已存在同名文件,为了防止该文件被覆盖,可以在上传的文件名后拼接当前的时间戳。
讯享网
上传文件的前端部分,我直接使用了layui的多文件上传功能,实现起来也比较简单。

文件预览与下载
文件预览与文件下载的功能其实差不多,直接夹文件写入response的输出流中,浏览器会根据自己能否解析该文件类型来决定是预览还是开启下载。如果是要下载支持预览的类型的文件,需要在回应头中添加一个属性,具体见代码。
文件预览代码
文件下载代码
讯享网
回收站功能的实现
在文件管理中删除文件,实际上是调用了接口将文件移动到回收站路径下.而在回收站中删除文件是调用了接口,这才是真正意义上的删除文件.在回收站中还可以恢复文件,恢复文件调用的是接口。
接口代码
接口代码

讯享网
接口代码
权限与安全
用户登录与基于ip地址和定时缓存的登录保护
登录流程:根据用户名和密码查询数据库,若查询到了用户信息,则说明用户名和密码正确,将用户名存入中,登录成功。
定时缓存,我这里使用了hutool提供的,存入其中的键值对过期将会消失。在用户尝试登录失败后,我们就以该请求的IP地址为键,在缓存中记录该ip的用户尝试登录失败的次数,当登录失败超过五次后则不再处理该ip的登录请求,直到缓存中的数据过期后才能重新尝试,这里设置的是30分钟。
登录代码:
讯享网
使用拦截器检测用户是否登录
编写一个登录拦截器实现springboot提供的,并实现其方法。
若session中存在属性则说明用户已登录,按照正常逻辑处理请求,否则重定向到登录页面。
编写类实现springboot提供的接口,并实现方法,将我们的拦截器添加到Spring MVC的请求处理流程中。
讯享网
日志统计
实现简单的日志记录,记录用户的操作。
每条日志信息包括:编号,操作,文件路径(登录操作除外),用户名,IP地址,日期

日志信息实体类
操作枚举类
讯享网
简单的日志系统
总结
本系统实现了一个简单的个人文件服务器,功能方面还是基本满足了一个文件服务器的需求。但是由于本人水平和开发时间有限,很多地方实现的还是比较粗糙。还有一些是基于实际出发,我做这个系统的目的是想给个人使用,所以也只实现了核心的功能,向用户注册等次要功能都没有实现。写下这篇博客一是记录一下这个项目中使用到的技术,二是分享一下实现这个系统的思路,希望对有需要的人有所帮助。
项目仓库:https://gitee.com/TTODS/my-file-server
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/187963.html