Easy云盘总结篇-回收站
说在前面:此项目是跟着B站一位大佬做的,不分享源码,支持项目付费
文章目录
- 文件列表
- 恢复文件
- 彻底删除
文件列表
这个逻辑没啥好说的,根据状态RECYLE在数据库里查询。
恢复文件
这个逻辑和之前的将文件添加进回收站的逻辑差不多就是相反的,前面懂了,这里就很好理解,可以先去看之前的文章:删除文件,再来看这节。
首先要清除,无论之前删的是哪一级的文件(夹),将它还原,就只能将它还原到根目录下,不可能说还原到原来的目录,那不符合常理。
然后就是还原的时候还要考虑到根目录下是否有重名文件(夹),要进行重命名。
先说最简单的,恢复一个文件
这里恢复文件1。
这里因为是文件1,直接绕过for到下面。然后就先用Map装了所有根目录(file_pid=0)的文件(夹)
走到updateFileDelFlagBatch(null, delFileIdList) 这,将文件1状态更新为USING(使用中),然后再处理是否重命名问题。
再来说还原文件夹1:
这里fileInfoList只装有文件夹1,然后进入for循环里的递归,将文件夹1下的所有子文件夹(也就是文件夹2,状态为DEL)装进delFileSubFolderFileIdList里。
然后走updateFileDelFlagBatch(delFileSubFolderFileIdList, null),将file_pid为文件夹1和文件夹2的file_id的文件(也就是文件2和文件夹2)状态更新为USING(使用中),但是他们的其他就不再变化,父Id仍然是文件1的file_id。
然后就是处理选中的文件夹1,将它的父id设置为根目录(filePid=0),
走updateFileDelFlagBatch(null, delFileIdList),将文件夹1状态设置为USING,最后处理重命名问题,结束。
总的来说,先将子文件(夹)(原状态为DEL)设置为USING,再来将选中文件(夹)(原状态为RECYLE)设置成USING,并更改其file_pid=0
彻底删除
其实和前面删除文件的逻辑类似,可以先看这个:删除文件,再来看这个,就很好理解了。
先说彻底删除一个文件
直接走到delFileBatch(null,Arrays.asList(fileIdArray)),将文件1删除
如果是彻底删除一个文件夹1
先找到文件夹1及其子文件夹(文件夹2),
走delFileBatch(delFileSubFileFolderIdList,null),将父id为文件夹1和文件夹2的file_id并且原状态为DEL(删除)的子文件(夹),也就是文件2和文件夹2删除,
最后
走**delFileBatch(null,Arrays.asList(fileIdArray))**将文件夹1删除。
这回的删除就不再是更改状态,而是从数据库里删除,所以还要更新空间使用。