网盘文件管理系统——java实现

简介

用java写的网盘类型的文件管理系统后端部分。后端主要通过FilePath和FileName字段确定一个文件(夹),一种模拟文件系统的方式显示。

ApiFox接口文档

image-20221024120651826

注:分片上传功能还未上线。

链接: https://www.apifox.cn/apidoc/shared-4fc7a028-9da9-47ab-8a37-4de4654a4c3d 访问密码 : wSS5eVVb

一些接口的代码实现说明:

image-20221024124529010

项目地址

需要详细细节请看代码仓库
github链接

一些功能实现草稿

文件管理部分:

1)创建新文件夹:
  1. 正常的文件夹重名判断。

重新创建文件夹:

新建文件夹的:执行 mkdir /foo/bar 之后,会创建 /foo、/foo/bar 两个文件夹

2)删除文件夹的:

比如:/nihao1/nihao2/nihao3/nihao4

如果我要删除/nihao4:直接根据/nihao1/nihao2/nihao3和/nihao4删除

如果我要删除/nihao1:先查出/nihao1的全部文件夹和删除全部该层全部文件。

public void delete(String path){
    List<String> dirs = get(path);//得到该目录下的全部文件夹
    if(dirs.length==0return ;
    
    
    deleteFileOrDir(path);//删除全部文件(夹
    
    for dir in dirs{
        delete(path+dir)
    }
}


3)重命名文件夹:

比如:/nihao1/nihao2/nihao3/nihao4/touxiang.jpg

如果只重命名文件touxiang.jpg:通过/nihao1/nihao2/nihao3/nihao4和touxiang.jpg来重命名

如果重命名文件夹/nihao2/:先通过/nihao1/和/nihao2/修改当前层文件夹名字,再递归对nihao2目录下的文件的父目录名字都修改。

public void renameDigui(String oldPath, String newPath){
    List<String> dirs = get(oldPath);//得到该目录下的全部文件夹,待递归修改。
    
   //得到该目录下全部文件,待全部直接遍历修改就行。
   
    
    for dir in dirs{
        
        renameDigui(path+dir);

        
    }
    
}

4)复制文件夹:

比如:/nihao1/nihao2/nihao3/nihao4/touxiang.jpg

  1. 如果只复制touxiang.jpg这个文件,就直接修改路径copy就行。其中需要注意的是需要判断目标文件夹有没有同名冲突。
  2. 如果要复制nihao2这个文件夹,同样和上面那个要进行冲突判断,对子文件进行直接修改路径copy就行,对子文件夹需要递归判断。
public void copyDigui(String oldPath, String newPath){
    List<String> dirs = get(oldPath);//得到该目录下的全部文件夹,待递归复制。
    
    直接将当层全部复制就行//得到该目录下全部文件,待全部直接遍历复制就行。
    
    if(dirs.length==0return ;//可要可不要。
    
    for dir in dirs{
        copyDigui(oldPath+dir,newPath+dir);
    }
    
}
5)移动文件夹:

比如:/nihao1/nihao2/nihao3/nihao4/touxiang.jpg

  1. 如果只移动touxiong.jpg这个文件,就直接修改路径来move就行了。其中需要注意目标文件夹下是不是有冲突文件。
  2. 如果要复制nihao2这个文件夹,同样和上面一样要进行目标路径下有没有冲突文件夹。move文件,对于子文件直接修改路径move就行,对于对于子文件夹就需要进行递归move了

当我写完这个后,我发现可以直接用上面复制文件夹,加一个删除原文件(夹)操作就行了。

public void moveDigui(String oldPath, String newPath){
    List<String> dirs = get(oldPath);//得到该目录下的全部文件夹,待递归移动。
    
    直接将当层全部复制就行//得到该目录下全部文件,待全部直接遍历移动就行。
    
    if(dirs.length==0return ;//可要可不要。
    
    for dir in dirs{
        copyDigui(oldPath+dir,newPath+dir);
    }
    
}
6)文件上传部分:

MultipartFileToFileUtil类中:默认getOriginalFileName得到的文件时不包含路径“/”的,然后前端传文件夹对象的话,会将路径放到OriginalFilename中去,所以种类就直接用给定的文件名了。

//toFile = new File(file.getOriginalFilename());
log.info("MultipartFileToFileUtil: file.getOriginalFilename() = " + file.getOriginalFilename());
log.info("MultipartFileToFileUtil: fileName = " + fileName);
toFile = new File(fileName);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣使然的小小

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值