【easy云盘 | day09】删除文件 + 回收站恢复文件


在这里插入图片描述

前言

再次重申,本项目非原创,视频来源于:
Springboot项目实战 easypan 仿百度网盘 计算机毕业设计 简历项目 项目经验(后端)

再次重申:本人不分享项目源码,支持项目付费!!

回顾

上一篇博客记录了项目中关于目录的相关操作以及文件移动和下载文件,关于文件还剩余删除文件、回收站中还原文件、彻底删除文件等操作。

完成任务

1. 删除文件

controller 层实现:
在这里插入图片描述

service 层实现:
在这里插入图片描述
实现步骤:
(1)根据选定的文件 id 查找要删除的文件对象。
(2)调用 findAllSubFolderFileList()方法,递归找到所有要删除的文件 id,包括(1. 选中的文件id、2. 选中的文件夹的id、3. 选中的文件夹下的子文件和子文件夹的 id)—> 找到子文件夹,再次递归找到该子文件夹下的子文件和子文件夹的 id … …
在这里插入图片描述
(3)将找到的所有文件状态都更新为删除状态。
(4)将一开始选中的文件(前段传入的fileIds 中包含的文件)状态更新为回收站。

疑问为什么要将找到的所有文件的状态都更新为删除状态后,还要将一开始选中的文件的状态更新为回收站?而不是将找到的所有文件状态都改变为回收站?或都改变为删除状态?
—— 考虑到我们回收的时候,是从回收站中回收我们在页面选择的要删除的文件,而找到的所有文件中可能包括在页面选择的文件的子文件或子文件夹。针对这些子文件和子文件夹,它们的父文件都要进入回收站了,它们肯定也不能存在,所以要将它们都置为删除状态。但页面选择的文件为了之后从回收站中显示,需要将他们标记为回收站。
那为什么不将所有找到的文件都更新为回收站呢?
—— 设置回收站这个状态是希望想要从回收站中回收文件时,显示之前从页面中点击选择的要删除的文件或目录,而不会显示要删除的目录下的子文件或子目录。例如,你在页面只选择删除(文件夹 A,文件 a),但文件夹 A 中包含着 文件 b、文件 c,如果全部都标记为回收站状态,到时候在回收站页面中就会显示(文件夹 A,文件 a、文件 b、文件 c),这时候就会奇怪我们一开始并未显示地选择 文件 b、文件 c 进行删除。

2. 加载回收站文件列表

当点击回收站时,会显示已删除文件列表:
在这里插入图片描述
可以看出,页面的显示需要进行分页处理。

controller 层实现:
在这里插入图片描述

调用 service 层的分页查询方法:
在这里插入图片描述

最后还要调用 convert2PaginationVO() 方法,将获取的元素类型为 FileInfo 对象转换成 FileInfoVO 对象:
在这里插入图片描述

3. 恢复回收站文件

回收站中可以批量勾选文件,点击还原恢复文件:
在这里插入图片描述
此时,会调用后端的 recoverFile 方法,提供要还原的文件的 id:
在这里插入图片描述

controller 层实现:
在这里插入图片描述

调用 service 层的方法:
在这里插入图片描述
可以看出,恢复文件的步骤还是比较繁琐,梳理一下:
(1)找到要恢复的文件对象,并存储在List数组 fileInfoList 中。
(2)找到要恢复的目录及其子目录的 id 存储在 delFileSubFolderFileIdList 中。
(3)查询所有根目录的文件对象,并以文件名为 key,文件对象为 value,存储在Map型的 rootFileMap 中。
(4)遍历 delFileSubFolderFileIdList ,调用 mapper 层的修改方法,将要恢复的目录及其子目录下的被标记为删除的文件,状态修改为正常使用。
在这里插入图片描述
在这里插入图片描述
(5)将页面中选中的文件状态修改为正常使用,并将页面选择还原的文件还原到根目录下。
(7)遍历所选的要还原的文件,在根目录的 rootFileMap 中查找,是否要还原的文件的文件名在目前的根目录中已经存在,如果存在,则需要对要还原的文件进行重命名。

疑问为什么要将页面选择的要还原的文件还原到根目录下?
—— 如果还原到原目录,可能存在选择还原文件的原父级目录已经删除或在回收站中,此时还原到原来的父级目录下,还原后页面中也不会存在这个还原文件,没有意义。

4. 彻底删除文件

彻底删除文件,是在回收站中将文件删除,这会直接删除数据库中文件信息,并释放用户的空间。

controller 层:
在这里插入图片描述

service 层实现:
在这里插入图片描述

注意:

  • 彻底删除目录时,也要彻底删除该目录下的子目录和子文件。
  • 如果是管理员,不需要添加文件删除(或回收站)标志,可以对文件进行直接删除。
  • 删除文件后,要更新用户的使用空间以及在缓存中的用户空间。

总结

文件的删除和恢复过程实现起来比较复杂,需要考虑删除的文件是目录时,对目录下的子目录和子文件的操作;还有彻底删除文件时要考虑用户空间的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值