一、项目简述
功能:用户的邮箱注册、验证码验证以及用户登录。 不需要注册账号,也可以上传满足条件的临时文件,但是 只4小时内有效。 文件的管理,上传、下载、重命名、删除、查看统计数 据、分类管理等。 文件夹的管理,创建、删除、重命名。 文件的分享,支持通过链博口二维码的分享方式等等。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ JavaScript + JQuery + Ajax + maven等等
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
if (files.size()!=0){
for (int i = 0; i < files.size(); i++) {
Integer fileId = files.get(i).getMyFileId();
boolean b = FtpUtil.deleteFile("/"+files.get(i).getMyFilePath(), files.get(i).getMyFileName() + files.get(i).getPostfix());
if (b){
myFileService.deleteByFileId(fileId);
fileStoreService.subSize(folder.getFileStoreId(),Integer.valueOf(files.get(i).getSize()));
}
}
}
if (folders.size()!=0){
for (int i = 0; i < folders.size(); i++) {
deleteFolderF(folders.get(i));
}
}
fileFolderService.deleteFileFolderById(folder.getFileFolderId());
}
}
登录控制器:
/**
* @Description 迭代删除文件夹里面的所有文件和子文件夹
* @Author xw
* @Date 9:17 2020/2/29
* @Param [folder]
* @return void
**/
public void deleteFolderF(FileFolder folder){
//获得当前文件夹下的所有子文件夹
List<FileFolder> folders = fileFolderService.getFileFolderByParentFolderId(folder.getFileFolderId());
//删除当前文件夹的所有的文件
List<MyFile> files = myFileService.getFilesByParentFolderId(folder.getFileFolderId());
if (files.size()!=0){
for (int i = 0; i < files.size(); i++) {
Integer fileId = files.get(i).getMyFileId();
boolean b = FtpUtil.deleteFile("/"+files.get(i).getMyFilePath(), files.get(i).getMyFileName() + files.get(i).getPostfix());
if (b){
String fileName = f.getMyFileName()+f.getPostfix();
//从FTP文件服务器上删除文件
boolean b = FtpUtil.deleteFile("/"+remotePath, fileName);
if (b){
//删除成功,返回空间
fileStoreService.subSize(f.getFileStoreId(),Integer.valueOf(f.getSize()));
//删除文件表对应的数据
myFileService.deleteByFileId(f.getMyFileId());
}
logger.info("删除文件成功!"+f);
}
if (FtpUtil.deleteFolder("/" + uId)){
logger.info("清空FTP上该用户的文件成功");
}else {
logger.error("清空FTP上该用户的文件失败");
}
/**
* @Description 判断当前浏览器是否为ie
* @Author xw
* @Date 22:39 2020/3/5
* @Param [request]
* @return boolean
**/
public static boolean isMSBrowser(HttpServletRequest request) {
String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
String userAgent = request.getHeader("User-Agent");
for (String signal : IEBrowserSignals) {
if (userAgent.contains(signal)){
return true;
}
}
return false;
}
}
管理员控制器:
/**
* @ClassName: AdminController
if (FtpUtil.downloadFile("/" + remotePath, fileName, os)) {
myFileService.updateFile(
MyFile.builder().myFileId(f).downloadTime(times + 1).build());
os.flush();
os.close();
logger.info("文件下载成功!");
}
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
/**
* @Description 根据文件的后缀名获得对应的类型
* @Author xw
* @Date 23:20 2020/2/10
* @Param [type]
* @return int 1:文本类型 2:图像类型 3:视频类型 4:音乐类型 5:其他类型
**/
public int getType(String type){
}
/**
* @Description 删除文件
* @Author xw
* @Date 23:14 2020/2/10
* @Param [fId, folder]
* @return java.lang.String
**/
@GetMapping("/deleteFile")
public String deleteFile(@RequestParam Integer fId,Integer folder){
//获得文件信息
MyFile myFile = myFileService.getFileByFileId(fId);
String remotePath = myFile.getMyFilePath();
String fileName = myFile.getMyFileName()+myFile.getPostfix();
//从FTP文件服务器上删除文件
boolean b = FtpUtil.deleteFile("/"+remotePath, fileName);
if (b){
//删除成功,返回空间
* @Date 23:16 2020/2/10
* @Param [folder, map]
* @return java.lang.String
**/
@PostMapping("/addFolder")
public String addFolder(FileFolder folder,Map<String, Object> map) {
//设置文件夹信息
folder.setFileStoreId(loginUser.getFileStoreId());
folder.setTime(new Date());
//获得当前目录下的所有文件夹,检查当前文件夹是否已经存在
List<FileFolder> fileFolders = null;
if (folder.getParentFolderId() == 0){
//向用户根目录添加文件夹
fileFolders = fileFolderService.getRootFoldersByFileStoreId(loginUser.getFileStoreId());
}else{
//向用户的其他目录添加文件夹
fileFolders = fileFolderService.getFileFolderByParentFolderId(folder.getParentFolderId());
}
}
try {
//提交到FTP服务器
boolean b = FtpUtil.uploadFile("/"+path, name + postfix, files.getInputStream());
if (b){
//上传成功
logger.info("文件上传成功!"+files.getOriginalFilename());
//向数据库文件表写入数据
myFileService.addFileByFileStoreId(
MyFile.builder()
.myFileName(name).fileStoreId(loginUser.getFileStoreId()).myFilePath(path)
.downloadTime(0).uploadTime(new Date()).parentFolderId(folderId).
size(Integer.valueOf(size)).type(type).postfix(postfix).build());
//更新仓库表的当前大小
fileStoreService.addSize(store.getFileStoreId(),Integer.valueOf(size));
try {
Thread.sleep(5000);
map.put("code", 200);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 用于注册流程,用户名,密码,邮箱等校验工作由前端来完成
*
* @param map 用于存储提示信息
* @author GGBOY
* @date 2020/1/28
*/
@PostMapping("/register")
public String register(User user, String code, Map<String, Object> map) {
String uCode = (String) session.getAttribute(user.getEmail() + "_code");
if (!code.equals(uCode)) {
map.put("errorMsg", "验证码错误");
}
map.put("imgPath","user_img/"+id+".jpg");
map.put("url",url);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return map;
}
/**
* @Description 分享文件
* @Author xw
* @Date 14:23 2020/2/12
* @Param [fId]
* @return void
**/
@GetMapping("/file/share")
public String shareFile(Integer f,String p,String t,Integer flag){
String fileNameTemp = "";
//去FTP上拉取
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setCharacterEncoding("utf-8");
// 设置返回类型
response.setContentType("multipart/form-data");
// 文件名转码一下,不然会出现中文乱码
response.setHeader("Content-Disposition", "attachment;fileName=" + fileNameTemp);
if (FtpUtil.downloadFile("/" + remotePath, fileName, os)) {
myFileService.updateFile(
MyFile.builder().myFileId(f).downloadTime(times + 1).build());
os.flush();
os.close();
logger.info("文件下载成功!");
}
} catch (Exception e) {
e.printStackTrace();
}
return "success";