自己动手用Springboot实现仿百度网盘的实践

本项目基于Springboot开发实现,前端采用BootStrap开发实现,模仿百度网盘实现相关功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

项目编号:BS-PT-032

本项目基于Springboot开发实现,前端采用BootStrap开发实现,系统功能完整,交互性好,模仿百度网盘实现相关功能,比较适合做毕业设计使用,创意性强。

开发工具为IDEA或ECLIPSE,数据库采用MYSQL数据库。

系统部分功能展示如下:

http://localhost:8080/toLogin admin / 123456

登陆页面:

主页

对应本地磁盘存储目录:

分享网盘资料

根据提取码下载相关资料

下载

重命名文件或文件夹

文件上传

新建文件夹

上传音乐文件后可以一键自动播放

以上是本系统的部分展示功能,可以做为毕业设计使用。

部分代码实现如下:

 package com.bjpowernode.pan.service.impl; import com.bjpowernode.pan.dao.model.LinkSecret; import com.bjpowernode.pan.model.FileMsg; import com.bjpowernode.pan.service.IFileService; import com.bjpowernode.pan.util.*; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.channels.FileChannel; import java.text.SimpleDateFormat; import java.util.*; /** *指南针毕设 */ @Service public class FileServiceImpl implements IFileService { public static String fileRootPath; public static String tempPath; //分块文件临时存储地址 // 自定义密钥 static private String key; @Autowired SaveServiceImpl saveService; @Autowired LinkSecretServiceImpl linkSecretService; private Logger logger = LoggerFactory.getLogger(this.getClass()); @Value("${tempPath}") public void setTempPath(String tempPath) { FileServiceImpl.tempPath = tempPath; } @Value("${fileRootPath}") public void setFileRootPath(String fileRootPath) { FileServiceImpl.fileRootPath = fileRootPath; } @Value("${key}") public void setKey(String key) { FileServiceImpl.key = key; } @Override public boolean upload(MultipartFile file, String userName, String path) { boolean b = false; // 服务器上传的文件所在路径 String saveFilePath = fileRootPath + userName + "/" + path; logger.warn("1 saveFilePath:" + saveFilePath); // 判断文件夹是否存在-建立文件夹 File filePathDir = new File(saveFilePath); if (!filePathDir.exists()) { filePathDir.mkdir(); } // 获取上传文件的原名 例464e7a80_710229096@qq.com.zip String saveFileName = file.getOriginalFilename(); // 上传文件到-磁盘 try { FileUtils.copyInputStreamToFile(file.getInputStream(), new File(saveFilePath, saveFileName)); b = true; } catch (Exception e) { logger.error("Exception:", e); return false; } return b; } @Override public String download(String fileName, String userName, String path) { // 服务器下载的文件所在的本地路径的文件夹 String saveFilePath = fileRootPath + userName + "/" + path; logger.warn("1 saveFilePath:" + saveFilePath); // 判断文件夹是否存在-建立文件夹 File filePathDir = new File(saveFilePath); if (!filePathDir.exists()) { filePathDir.mkdir(); } // 本地路径 saveFilePath = saveFilePath + "/" + fileName; String link = saveFilePath.replace(fileRootPath, "/data/"); link = StringUtil.stringSlashToOne(link); logger.warn("返回的路径:" + link); return link; } @Override public List userFileList(String userName, String path) { logger.warn("执行userFileList函数!"); List fileMsgList = new ArrayList<>(); // 拉取文件列表-本地磁盘 String webSaveFilePath = fileRootPath + userName + "/" + path; File files = new File(webSaveFilePath); if (!files.exists()) { return fileMsgList; } File[] tempList = files.listFiles(); if (tempList == null) { return fileMsgList; } for (File file : tempList) { if (file.isFile()) { FileMsg fileMsg = new FileMsg(); // 获取文件名和下载地址 String link = file.toString().replace("\\", "/"); String[] nameArr = link.split("/"); String name = nameArr[nameArr.length - 1]; link = link.replace(fileRootPath, "/data/"); link = link.replace("/root/pan/", "/data/"); String size = FileUtil.fileSizeToString(file.length()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String lastModTime = formatter.format(file.lastModified()); // 赋值到json fileMsg.setName(name); fileMsg.setLink(link); fileMsg.setSize(size); fileMsg.setTime(lastModTime); if (FileUtil.isMp4(name)) { fileMsg.setType("mp4"); } else if (FileUtil.isVideo(name)) { fileMsg.setType("video"); } else { fileMsg.setType("file"); } fileMsgList.add(fileMsg); } else { FileMsg fileMsg = new FileMsg(); String link = file.toString().replace("\\", "/"); String[] nameArr = link.split("/"); String name = nameArr[nameArr.length - 1]; String dirPath = link.replace(fileRootPath + userName, ""); if (!name.equals("userIcon")) { fileMsg.setName(name); fileMsg.setSize("Directory"); fileMsg.setType("dir"); fileMsg.setLink(dirPath); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String lastModTime = formatter.format(file.lastModified()); fileMsg.setTime(lastModTime); fileMsgList.add(fileMsg); } } } //排序 ListUtil.listSort(fileMsgList); return fileMsgList; } /** * 展示path目录下的全部文件信息 * * @param path 文件完全路径 * @param userName 用户名 * @return FileMsg List */ @Override public List list(String path, String userName) { List fileMsgList = new ArrayList<>(); File files = new File(path); if (!files.exists()) { return fileMsgList; } File[] tempList = files.listFiles(); if (tempList == null) { return fileMsgList; } // 遍历每个文件转json对象 for (File file : tempList) { fileMsgList.add(FileUtil.fileToFileMsg(file, userName, fileRootPath, "/data/")); } // 排序规则:文件夹在前,文件在后,更新时间最近的在前 ListUtil.listSort(fileMsgList); return fileMsgList; } @Override public Boolean[] userFileDelete(String fileName, String userName, String path) { //解析fileName: 以$$符号分割 String[] fileNames = null; if (fileName.contains("$$")) { fileNames = fileName.split("\\$\\$"); } else { fileNames = new String[1]; fileNames[0] = fileName; } Boolean[] b = new Boolean[fileNames.length]; for (int i = 0; i  5) { for (int k = 4; k  search(String key, String userName, String path) { List fileMsgList = new ArrayList<>(); // 拉取文件列表-本地磁盘 String webSaveFilePath = fileRootPath + userName + "/" + path; File files = new File(webSaveFilePath); if (!files.exists()) { files.mkdir(); } //            File[] tempList = files.listFiles(); List tempList = new ArrayList<>(); tempList = SearchFileByKey.searchFile(webSaveFilePath, key, false, tempList); for (int i = 0; i  fileList = new ArrayList(Arrays.asList(fileArray)); Collections.sort(fileList, new Comparator() { // 按文件名升序排列 @Override public int compare(File o1, File o2) { if (Integer.parseInt(o1.getName()) 

到此这篇关于自己动手用Springboot实现仿百度网盘的实践的文章就介绍到这了,更多相关Springboot仿百度网盘内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是自己动手用Springboot实现仿百度网盘的实践的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java