目录
摘 要 1
Abstract 2
1.项目简介 3
1.1项目主要功能 4
1.2技术栈 4
1.3部署注意 4
2.数据库设计 5
2.1表结构 5
2.2ER图 7
2.3SQL插入 8
3.项目开发 9
3.1项目配置 9
3.2接口开发 10
3.3项目前端页面开发 12
3.4后端接口开发 21
3.4.1工具类 21
3.4.2restful接口(部分源码) 27
3.4.3FileService文件服务接口 31
4.项目展示 32
5.总结 35
6.更新 35
1.项目简介
因为开发中很多时候都需要上传和下载文件,所以想开发出一个模块,用于文件的上传和下载,自然而然也就想到了网盘,因为是个人开发,本文转载自http://www.biyezuopin.vip/onews.asp?id=14721所以版本项目应该会持续迭代,优化,此外,技术栈是springboot+mybatis+jquery+bootstrap。
1.1项目主要功能
•用户的邮箱注册、验证码验证以及用户登录。
•引入QQ第三方登录,为用户提供便捷的登录通道。
•不需要注册账号,也可以上传满足条件的临时文件,但是只4小时内有效。
•文件的管理,上传、下载、重命名、删除、查看统计数据、分类管理等。
•文件夹的管理,创建、删除、重命名。
•文件的分享,支持通过链接和二维码的分享方式。
•区分普通用户和管理员的角色,管理员可以修改普通用户的使用权限和网盘容量。
1.2技术栈
前端
•HTML、CSS、JavaScript、JQuery
•BootStrap以及多个插件
后端
•SpringBoot + MyBatis
•EhCache缓存
•ThymeLeaf 模板引擎
•腾讯QQ 第三方登录
•Ftp工具类、二维码工具类
部署
•阿里云轻量应用服务器
•Docker 环境
•FTP 服务
•MySQL 数据库
1.3部署注意
拉取项目到本地后,你需要修改一下配置信息
•application.yml:修改数据源信息以及邮箱服务端信息
•config.DruidConfig:修改druid登录的用户名和密码
•utils.FtpUtil:修改FTP服务器的基本信息
•utils.MailUtils:修改邮箱服务端发送方的邮箱
•resources.qqconnectconfig.properties:修改app_ID 和 app_KEY和 redirect_URI
3.项目开发
3.1项目配置
mybatis配置
<configuration>
<!--关于MyBatis的一些常用配置-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>
</configuration>
3.2接口开发
@Mapper
public interface FileFolderMapper {
/**
* @Description 根据文件夹的id删除文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param [fileFolderId]
* @return java.lang.Integer
**/
Integer deleteFileFolderById(Integer fileFolderId);
/**
* @Description 根据父文件夹的id删除文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param [parentFolderId]
* @return java.lang.Integer
**/
Integer deleteFileFolderByParentFolderId(Integer parentFolderId);
/**
* @Description 根据仓库的id删除文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param [fileStoreId]
* @return java.lang.Integer
**/
Integer deleteFileFolderByFileStoreId(Integer fileStoreId);
/**
* @Description 增加文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param [fileFolder]
* @return java.lang.Integer
**/
Integer addFileFolder(FileFolder fileFolder);
/**
* @Description 根据文件夹的id获取文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param [fileFolderId]
* @return com.moti.entity.FileFolder
**/
FileFolder getFileFolderById(Integer fileFolderId);
/**
* @Description 根据父文件夹的id获取文件夹
* @Author xw
* @Date 15:18 2020/2/26
* @Param * @param null
* @return
**/
List<FileFolder> getFileFolderByParentFolderId(Integer parentFolderId);
/**
* @Description 根据仓库的id获取文件夹
* @Author xw
* @Date 15:19 2020/2/26
* @Param [fileStoreId]
* @return java.util.List
**/
List<FileFolder> getFileFolderByFileStoreId(Integer fileStoreId);
/**
* @Description 获得仓库的文件夹数量
* @Author xw
* @Date 21:56 2020/2/10
* @Param [fileStoreId]
* @return java.lang.Integer
**/
Integer getFileFolderCountByFileStoreId(Integer fileStoreId);
/**
* @Description 根据仓库Id获得仓库根目录下的所有文件夹
* @Author xw
* @Date 23:49 2020/2/9
* @Param [fileStoreId]
* @return java.util.List
**/
List<FileFolder> getRootFoldersByFileStoreId(Integer fileStoreId);
/**
* @Description 根据文件夹的id修改文件夹信息
* @Author xw
* @Date 15:19 2020/2/26
* @Param [fileFolder]
* @return java.lang.Integer
**/
Integer updateFileFolderById(FileFolder fileFolder);
/**
* @Description 根据文件夹的id获取文件夹下面的文件
* @Author xw
* @Date 15:19 2020/2/26
* @Param [fileStoreId]
* @return java.util.List
**/
List<MyFile> getFileByFileFolder(Integer fileStoreId);
}