欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Easy云盘总结篇-文件分享

Easy云盘总结篇-文件分享

2025/5/8 12:56:18 来源:https://blog.csdn.net/Ggjvhsjsj/article/details/147720526  浏览:    关键词:Easy云盘总结篇-文件分享

说在前面:此项目是跟着B站一位大佬学的,不分享源码,支持项目付费

文章目录

    • 分享列表
    • 文件分享
      • 有效期、提取码
      • 分享链接
      • 分享相关信息、提取码校验
      • 外部文件分享列表
    • 保存文件到网盘

分享列表

在这里插入图片描述
在这里插入图片描述
这个逻辑没啥好说的之前做过类似的,大家自己看噢。

文件分享

有效期、提取码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个逻辑就是创建有效期和提取码。

分享链接

接着就是分享链接的生成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,这里用的方法还是之前下载文件那部分 文件下载 使用的code生成方法。这里不再叙述。

分享相关信息、提取码校验

然后我们根据这个链接,进到前端页面如下所示:
在这里插入图片描述
第一个,展示分享信息,这包括,分享人信息(头像昵称),分享时间,分享文件名称
在这里插入图片描述
第二个,提取码校验:
在这里插入图片描述
这些逻辑都蛮简单,就是接收用户输入的code,将其与我们之前存储在fileshare表中的对应shareid的code进行比较就可以了,大家自己看注释噢。

外部文件分享列表

难点来了!!!!
并不是说,你校验码相同就可以直接看到分享文件列表了,还要进行分享的处理,比如分享是否有效,是否存在。
还有要考虑分享内容的范围,避免用户恶意获得分享以外的文件。
会有疑问了,当时创建分享的时候,不就已经根据fileId生成了对应的shareId等相关数据,现在根据shareId来看分享内容怎么还会越界访问
在这里插入图片描述
假如说,我们现在没有进行一系列的处理,简单的拿到链接就去获取分享内容。
现在我的根目录下有两个文件夹,其中文件夹python里面有一个文件。
在这里插入图片描述
我现在分享的是文件夹java学习,注意看下面的path。
在这里插入图片描述

现在的path(9341245645),也就是文件夹java的fileId,进入后可以看到里面的内容。
在这里插入图片描述
我直接修改路径上的参数,改为path(9578051961),文件夹python的fileId。
发现了什么?
发现文件夹python里面的内容暴露出来了。明明我没有分享这个,但是用户可以不走界面而是篡改路径参数获得其他文件,这就是问题所在。
在这里插入图片描述
接下来,就是处理这个问题。以下面的目录结构为例

文件夹2(想恶意获取,fileId=y,filePid=0)
文件1
文件夹1(想分享的,fileId=x,filePid=0)

文件1.1
文件夹1.1

在这里插入图片描述
先进行分享的检查,是否为空,分享是否已过期。
然后前端传过来的参数有个filePid,用来拼接在分享链接后面。
如果filePid(x)不为空而且不为0,说明用户现在看的不是根目录那一层,而是进入了某个文件夹里(文件夹1)。如果用户点击进入文件夹,filePid就会变成这个文件夹的fileId,,这个filePid就是篡改的开始,用户可以将这个filePid改为另外的文件夹(文件夹2)的fileId(y)从而获得文件。
所以将这个filePid传给checkRootFilePid用来校验目标目录是否属于分享根目录的子树,例如,用户分享的是文件夹1(fileId=X),当用户尝试访问文件夹2(fileId=Y)时,系统需要验证Y是否是X的子目录,或者是否与X有层级关系。
在这里插入图片描述
其中如果你这个分享根目录rootFilePid(x)就等于fileId(x)的话,说明当前目录就是分享根目录,直接通过。
不然进入递归checkFilePid校验目录层级关系。(假设这里篡改为文件夹2
首先根据传过来的fileId(y)和userId,找到了对应的文件夹2。
然后如果发现文件夹2的filePid=0,说明查到了系统根目录仍未匹配rootFilePid,抛出异常。
如果filePid还没查到根目录0或者rootFilePid,就递归继续查它的上一级是否匹配rootFilePid。

慢慢理解吧大家------------->_<

保存文件到网盘

在这里插入图片描述
这里有两种情况
1.自己分享的文件只能下载,不能“保存到我的网盘”
2.分享给他人,可以直接下载,也可以保存到他自己的网盘
下载的逻辑就不再叙述,这里着重说明保存网盘。
在这里插入图片描述
这里先进行身份查看,对比分享人和web用户身份,自己分享的文件只能下载,不能“保存到我的网盘”
保存到网盘的核心就是将分享文件保存到用户提供的目录myFolderId下
在这里插入图片描述

然后就是将用户的文件列表放进currentFileMap,将分享的文件放进shareFileList,进行重命名的处理。
然后走findAllSubFile(List copyFileList, FileInfo fileInfo) ,将文件及其子文件添加到copyFileList中,最后批量插入到数据库中。
在这里插入图片描述
完成!!!(其实还有一些,但是逻辑都比较相似重复,没有再说的必要啦)
在这里插入图片描述
感谢大家的观看!!!!!若有任何问题,欢迎大家在评论区指出,共同学习

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词