简介
用java写的网盘类型的文件管理系统后端部分。后端主要通过FilePath和FileName字段确定一个文件(夹),一种模拟文件系统的方式显示。
ApiFox接口文档
注:分片上传功能还未上线。
链接: https://www.apifox.cn/apidoc/shared-4fc7a028-9da9-47ab-8a37-4de4654a4c3d 访问密码 : wSS5eVVb
一些接口的代码实现说明:
项目地址
需要详细细节请看代码仓库
github链接
一些功能实现草稿
文件管理部分:
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==0)return ;
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
- 如果只复制touxiang.jpg这个文件,就直接修改路径copy就行。其中需要注意的是需要判断目标文件夹有没有同名冲突。
- 如果要复制nihao2这个文件夹,同样和上面那个要进行冲突判断,对子文件进行直接修改路径copy就行,对子文件夹需要递归判断。
public void copyDigui(String oldPath, String newPath){
List<String> dirs = get(oldPath);//得到该目录下的全部文件夹,待递归复制。
直接将当层全部复制就行//得到该目录下全部文件,待全部直接遍历复制就行。
if(dirs.length==0)return ;//可要可不要。
for dir in dirs{
copyDigui(oldPath+dir,newPath+dir);
}
}
5)移动文件夹:
比如:/nihao1/nihao2/nihao3/nihao4/touxiang.jpg
- 如果只移动touxiong.jpg这个文件,就直接修改路径来move就行了。其中需要注意目标文件夹下是不是有冲突文件。
- 如果要复制nihao2这个文件夹,同样和上面一样要进行目标路径下有没有冲突文件夹。move文件,对于子文件直接修改路径move就行,对于对于子文件夹就需要进行递归move了
当我写完这个后,我发现可以直接用上面复制文件夹,加一个删除原文件(夹)操作就行了。
public void moveDigui(String oldPath, String newPath){
List<String> dirs = get(oldPath);//得到该目录下的全部文件夹,待递归移动。
直接将当层全部复制就行//得到该目录下全部文件,待全部直接遍历移动就行。
if(dirs.length==0)return ;//可要可不要。
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);