当前位置: 首页 > backend >正文

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中,最后批量插入到数据库中。
在这里插入图片描述
完成!!!(其实还有一些,但是逻辑都比较相似重复,没有再说的必要啦)
在这里插入图片描述
感谢大家的观看!!!!!若有任何问题,欢迎大家在评论区指出,共同学习

http://www.xdnf.cn/news/4620.html

相关文章:

  • 如何看待首个通用型智能体 (The First General AI Agent) Manus发布?
  • ORB-SLAM3论文阅读
  • Agent学习之:MCP和Function Call
  • # 创建一个功能完备的计算器应用:使用PyQt5和Python
  • 软考高级-系统设计架构师高频考点速记
  • 101个alpah学习,第3个alpha
  • C++初阶-string类4
  • Advanced Installer 22.5打包windows 安装包
  • 前端线上错误日志收集与定位指南
  • 食品行业EDI:General Mills EDI需求分析
  • 006 yum和Linux生态
  • 澳鹏干货 | 动态判断:如何用“群体智慧“优化AI数据标注流程?
  • vue中<router-view />中的组件调用父组件的方法
  • 数据库补充知识
  • 人脸识别技术应用管理办法的影响
  • 网络编程之端口号
  • 主数据管理与数据治理有什么关系?
  • 大模型 Agent 技术:开启智能交互新时代
  • Mermaid的常见用法
  • Oracle 数据布局探秘:段与区块的内部机制
  • 制作一款打飞机游戏40:点选敌人
  • 编写程序,统计两会政府工作报告热词频率,并生成词云
  • 【icpc陕西省赛】树的最大深度+基环树找环的大小
  • 注意力(Attention)机制详解(附代码)
  • LeetCode205_同构字符串
  • NHANES指标推荐:AISI
  • QML 动态加载组件
  • 论文解析[13] MIXED TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION
  • 【C++】C++11(上)
  • RDD的处理过程