基于javaweb的在线网盘系统(java+jsp+springboot+mysql+thymeleaf+ftp)

基于javaweb的在线网盘系统(java+jsp+springboot+mysql+thymeleaf+ftp)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

20220519002808

20220519002809

20220519002810

20220519002812

20220519002813

基于javaweb+SpringBoot的在线网盘系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)

一、项目简述

功能:用户的邮箱注册、验证码验证以及用户登录。 不需要注册账号,也可以上传满足条件的临时文件,但是只4小时内有效。 文件的管理,上传、下载、重命名、删除、查看统计数据、分类管理等。 文件夹的管理,创建、删除、重命名。 文件的分享,支持通过链接和二维码的分享方式等等,以及管理员对用户的管理等等。

二、项目运行

环境配置:

Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)

项目技术:

JSP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ JavaScript + JQuery + Ajax + maven等等

文件仓库控制器:

/**

  • @ClassName: FileStoreController

  • @Descriiption: 文件仓库控制器

**/

@Controller

public class FileStoreController extends BaseController {

private Logger logger = LogUtils.getInstance(FileStoreController.class);

/**

  • @Descriiption 上传临时文件

  • @Author xw

  • @Date 23:14 2020/3/9

  • @Param [files]

  • @return void

**/

@PostMapping(“/uploadTempFile”)

public String uploadTempFile(@RequestParam(“file”) MultipartFile file,String url) {

session.setAttribute(“imgPath”,“https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0.jpg”);

String name = file.getOriginalFilename().replaceAll(" “,”");

if (!checkTarget(name)){

logger.error(“临时文件上传失败!文件名不符合规范…”);

session.setAttribute(“msg”, “上传失败!文件名不符合规范”);

return “redirect:/temp-file”;

SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);

String dateStr = format.format(new Date());

String path = “temp/”+dateStr +“/”+UUID.randomUUID();

try {

if (FtpUtil.uploadFile(“/”+path, name, file.getInputStream())){

//上传成功

logger.info(“临时文件上传成功!”+name);

String size = String.valueOf(file.getSize());

TempFile tempFile = TempFile.builder().fileName(name).filePath(path).size(size).uploadTime(new Date()).build();

if (tempFileService.insert(tempFile)) {

try {

String id = UUID.randomUUID().toString();

String p = request.getSession().getServletContext().getRealPath(“/user_img/”);

Long t = tempFile.getUploadTime().getTime();

url = url+“/file/share?t=”+ UUID.randomUUID().toString().substring(0,10) +“&f=”+tempFile.getFileId()+“&p=”+size+“&flag=2”;

File targetFile = new File(p, “”);

if (!targetFile.exists()) {

targetFile.mkdirs();

File f = new File(p, id + “.jpg”);

if (!f.exists()){

//文件不存在,开始生成二维码并保存文件

OutputStream os = new FileOutputStream(f);

QRCodeUtil.encode(url, “/static/img/logo.png”, os, true);

os.close();

//异步删除临时文件

tempFileService.deleteById(tempFile.getFileId());

session.setAttribute(“imgPath”,“user_img/”+id+“.jpg”);

session.setAttribute(“url”,url);

session.setAttribute(“msg”,“上传成功,扫码/访问链接 即可下载!”);

return “redirect:/temp-file”;

} catch (Exception e) {

e.printStackTrace();

}else {

logger.info(“临时文件数据库写入失败!”+name);

session.setAttribute(“url”,“error”);

session.setAttribute(“msg”, “服务器出错了,临时文件上传失败!”);

}else{

//上传失败

logger.info(“临时文件上传失败!”+name);

session.setAttribute(“url”,“error”);

session.setAttribute(“msg”, “服务器出错了,上传失败!”);

} catch (IOException e) {

e.printStackTrace();

return “redirect:/temp-file”;

/**

  • @Descriiption 网盘的文件上传

  • @Author xw

  • @Date 23:10 2020/2/10

  • @Param [files]

  • @return java.util.Map<java.lang.String,java.lang.Object>

**/

@PostMapping(“/uploadFile”)

@ResponseBody

public Map<String, Object> uploadFile(@RequestParam(“file”) MultipartFile files) {

Map<String, Object> map = new HashMap<>();

if (fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission() != 0){

logger.error(“用户没有上传文件的权限!上传失败…”);

map.put(“code”, 499);

return map;

FileStore store = fileStoreService.getFileStoreByUserId(loginUser.getUserId());

Integer folderId = Integer.valueOf(request.getHeader(“id”));

String name = files.getOriginalFilename().replaceAll(" “,”");

//获取当前目录下的所有文件,用来判断是否已经存在

List myFiles = null;

if (folderId == 0){

//当前目录为根目录

myFiles = myFileService.getRootFilesByFileStoreId(loginUser.getFileStoreId());

}else {

//当前目录为其他目录

myFiles = myFileService.getFilesByParentFolderId(folderId);

for (int i = 0; i < myFiles.size(); i++) {

if ((myFiles.get(i).getMyFileName()+myFiles.get(i).getPostfix()).equals(name)){

logger.error(“当前文件已存在!上传失败…”);

map.put(“code”, 501);

return map;

SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);

String dateStr = format.format(new Date());

String path = loginUser.getUserId()+“/”+dateStr +“/”+folderId;

if (!checkTarget(name)){

logger.error(“上传失败!文件名不符合规范…”);

map.put(“code”, 502);

return map;

Integer sizeInt = Math.toIntExact(files.getSize() / 1024);

//是否仓库放不下该文件

if(store.getCurrentSize()+sizeInt > store.getMaxSize()){

logger.error(“上传失败!仓库已满。”);

map.put(“code”, 503);

return map;

//处理文件大小

String size = String.valueOf(files.getSize()/1024.0);

int indexDot = size.lastIndexOf(“.”);

size = size.substring(0,indexDot);

int index = name.lastIndexOf(“.”);

String tempName = name;

String postfix = “”;

int type = 4;

if (index!=-1){

tempName = name.substring(index);

name = name.substring(0,index);

//获得文件类型

type = getType(tempName.toLowerCase());

postfix = tempName.toLowerCase();

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();

}else{

logger.error(“文件上传失败!”+files.getOriginalFilename());

map.put(“code”, 504);

} cat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值