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

Easy云盘总结篇-文件上传02

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

文件预览

主要分视频和其他文件预览,但实现逻辑相同,只是请求路径有区别。
在这里插入图片描述
这段逻辑:

在这里插入图片描述

拿视频预览举例:

视频开始时,首先读取的文件并不是分片(0511006421),后面视频播放到结束,才是一个一个地加载分片文件播放。

所以,刚开始走else,通过fileId,userId找到文件,逐步将文件信息重定位到index.m3u8文件,也就是索引文件。索引文件里包含视频的时长分片等等信息。

然后视频加载,读取各个分片。核心逻辑就是处理路径。

创建目录

在这里插入图片描述
在这里插入图片描述
这段逻辑:

首先前端传来的filePid意味着,用户要在哪一层创建文件夹。

serviceImpl:

在这里插入图片描述
创建文件夹主要不能有同名。

目录文件夹信息

在这里插入图片描述
在这里插入图片描述
这段逻辑:

将path分级,获取到每一级文件夹的FileId,查到相应的文件夹后,同时这里展示的顺序要根据path里的层级顺序进行展示。

移动文件

当前示例文件如下图:
在这里插入图片描述
在这里插入图片描述
简化一下:
文件1
文件夹1

文件2
文件夹2(空)

这个逻辑有一点点复杂,有点绕。
首先按常规来说,我们想移动文件2,就会问你移到哪里去,这个目标文件夹不可能在文件2目前存放的路径(根/文件夹1),哪有原地移动的道理。所以,在移动之前,我们要进行目标文件夹的展示,给用户选择,用户只能选择除当前所在文件夹所在目录之外的文件夹,这个目标文件夹是可以在当前文件夹下,只是路径不同了(比如:根/文件夹1/文件夹2)。
比如说:
在这里插入图片描述

展示其他文件夹

在这里插入图片描述

移动文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这段逻辑:

先进行各种特殊情况的判断处理。

然后就是移动文件,核心就是更改其父Id,而不是保存路径的修改(路径固定)。所以在移动文件时,就需要考虑到移动过去后,不能与目标文件夹的文件重名,需要进行重命名。

文件重命名

在这里插入图片描述
这里我当时的问题:为什么要查两遍文件?
为了防止并发情况下的重名问题,因为前面的 checkFileName 检查和更新操作之间可能有其他线程插入,导致重复,所以再次检查确保唯一性。

事务开启 ,任何一步失败(如二次检查发现重名)都会回滚,避免脏数据。

下载文件

在我们下载文件时,两种情况:1:在我们easy云盘页面直接下载 2:分享下载链接给他人下载

直接下载的情况,用户已经登录,浏览器有 session,所以服务器可以通过 session 验证用户身份。但分享下载时,他人可能未登录,需要通过链接中的参数(如文件 ID 和签名)来验证。而如果浏览器调用第三方插件(如迅雷),就无法获取 session,所以需要一个独立于 session 的验证方式,比如临时令牌或 code,这个 code 有时效性,确保安全。
所以我们下载文件实际需要两步:第一:先校验登录,生成一串有时效性的code;第二:用户拿到code就可以直接下载文件。

生成code

在这里插入图片描述
redis:
在这里插入图片描述

下载文件

在这里插入图片描述

通过这个方法,我们就把目标文件写入到了HTTP响应当中,实现了文件的下载。

相关文章:

  • 2025年PMP 学习三
  • 爬虫管理平台-最新版本发布
  • 学习spring boot-拦截器Interceptor,过滤器Filter
  • ResNet改进(36):ResNeXt与ResNet的混合模型实现
  • 解决:前后端跨域请求
  • 【Java学习笔记】可变参数
  • 深入解析Linux进程间通信(IPC):机制、应用与最佳实践
  • 【Java 并发编程】线程的基本使用(持续更新优化)
  • 全面掌握 Jetpack Compose 的 State 体系:核心用法与最佳实践
  • 深入理解线程死锁:从概念到 Java 实战
  • 【win11 】win11 键盘测试
  • 【Python】存储机制和容器四大件列表、元组、字典、集合
  • 【言语理解】中心理解题目之选项分析
  • Java捕获InterruptedException异常后,会自动清空中断状态
  • 卷积神经网络实战(2)
  • [ML]通过50个Python案例了解深度学习和神经网络
  • VulnHub-OSCP靶机
  • 【神经网络与深度学习】生成模型-单位高斯分布 Generating Models-unit Gaussian distribution
  • 超详细讲解C语言转义字符\a \b \r \t \? \n等等
  • 单调栈与单调队列(c艹)、可视化Qt?
  • 100%关税!特朗普要让美国电影100%美国制造
  • 当AI开始谋财害命:从骗钱到卖假药,人类该如何防范?
  • 阿根廷发生5.6级地震,震源深度30公里
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管
  • 牛市早报|今年第二批810亿元超长期特别国债资金下达,支持消费品以旧换新
  • 新疆维吾尔自治区原质量技术监督局局长刘新胜接受审查调查