云盘后端分析

news2025/1/12 4:48:53

1.验证码

用的是外面找的

2.发送邮箱验证码

配置邮箱的授权码

我们在发送邮箱的时候,需要把那个值传到数据库中,数据库中有它的状态,我们需要根据状态判断它是注册还是找回密码

我们在发送邮箱之前,先从session里面得到我们验证码的值然后进行比较

然后到EmailCodeServiceImpl的sendEmailCode方法中通过输入的邮箱查用户表中的邮箱是否存在

然后我们生成5位数的随机数code

我们有可能多发送了几条邮箱,所以我们在发送新的时候我们需要把剩下全部都为1

调用发送邮箱的方法

最后写入数据库就行了

3.注册

我们在controller层中通过session中的code值判断是否要调用注册的方法,但我们不管成功与否都要清空session的数据,防止别人重复测试验证码

在方法中我们先查一下名称和邮箱是否已存在

然后我们要判断邮箱和验证码是否正确,还要在验证码有效的时间内

最后添加到userInfo对象中后添加到数据库就行了

4.登录

在方法中我们还是先判断密码或账号是否有问题 

而后我们更新一下最后登录时间

我们封装了user对象,我们只需有返回名字、id、头想和是否为管理员,那我们就添加SessionWebUserDto对象的数据并判断当前用户是否为管理员

最后设置一下用户的空间就行了

5.qq登录

我们在使用QQ登录的时候点击那个头像需要跳转到一个地方,所以我们先需要创建一个20位的随机数

然后callbackUrl是qq登录返回的数据,如果不为空,我们就要在session中存入我们的callbackUrl,用state为键

然后我们前往qq登录的地址

然后我们要获取qq返回的信息并登录

下面是我们qq返回的数据,所以我们要用map存起来

在qqLogin方法中我们需要先调用qq返回回来的code去获取accesssToken

而后获取qq openId

然后我们就将qq传的openId放到数据库中查找

如果为空就是要自动注册了,我们从json中的accessToken和openId抽出我们qq传回的头像等数据

然后我们要从json对象中提取头像和昵称要我们的数据库对象中

在补充其他数据就好了

如果不为空就是登录了,我们只需要更改一下我们的最后登录时间和头像就行了

我们再封装我们的前端需要的对象和是否是管理员

最后获取我们用户的内存就行了

7.文件列表

我们从前端传回music等字段,我们要将它转换为我们数据库中对应的数字,如果不为空就设置回显的类型了

然后我们获取当前类型下的文件后再返回我们封装后的数据到前端就行了

8.文件秒传*

我们需要前端和后端统一好我们文件切片的大小,如100mb要按10mb切的话就要切10片,所以我们要告诉前端我们传到了第几个分片,最后我们再合并分片,下面是我们方法中需要的字段

我们先获取fileId以便我们能定位我们的位置

获取用户的内存

当我们是新文件进来的时候我们将fileMd5放到数据库中查,有就是要秒传了

如果我们前面查出数据库中有当前的fileId就是秒传,我们只需提取出第一个数据,然后将数据中大小加上用户已使用的空间大小是否大于用户总空间,大于就报空间不足了

然后我们将原有的数据复制一份

但我们的文件名要重命名,我们在数据库中查一下是否有该文件,有我们就重命名,在名字的后面加个5位的随机数就行了

然后我们更新一下用户空间使用情况,主要是下面的sql语句

我们的空间不足就报空间不足

9.文件上传*

我们开始分片上传,但我们不知道用户内存是否充足,所以我们每个切片都存到redis的临时目录中,一来新的我们就比较一下内存是否充足就行了

充足的话就获取在temp中有userid加fileid组合和包名,没有就创建一个

接下来我们就可以创建一个个切片了

到这里我们就可以循环创建分片了,我们设置文件状态为转码中,然后更新redis临时目录中的数据,这样的话前端就会一直请求此api,也就不断的判断大小和生成下个切片

在我们上传最后一个分片后我们就要使用异步合并分片,我们先在真正的文件夹中创建由月分割的包

获取真实文件名和后缀后自动重命名

将数据填入数据库中

后我们更改用户的空间使用情况和告诉前端上传完成

我们等待事务提交后调用异步调用方法

我们在方法里找文件是否存在和是否是转码中,如果不存在或不是转码中我们就不处理了

我们要从临时目录获取我们要合并的分片和后缀

创建我们真实文件夹和真实文件名

最后我们合并一下文件后判断一下我们转码是否成功就行了

10.视频文件*

我们先通过后缀判断我们的文件是否是视频文件,是我们就走cutFile4Video方法里调用ffmpeg的命令帮助我们将文件转成ts文件在切割

我们通过ffmpeg生成.ts,然后生成索引文件.m3u8和切片.ts,最后把定位的index.ts删除

最后生成一下缩略图就行了

11.视频预览*

我们要预览视频在查数据库的时候不要查到mp4的源文件,要查我们刚切片的m3u8文件,所以我们就要从数据库中将我们原有查找的路径切出名字后和其他的枚举组成m3u8的路径

但我们第一次查到后会将其他的ts提到网络中,我们后面播放的话就会调用同一个方法,所以我们要判断我们要播放的ts

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

选择排序(二)——堆排序(性能)与直接选择排序

目录 一.前言 二.选择排序 2.1 堆排序 2.2选择排序 2.2.1 基本思想 2.2.2直接选择排序 三.结语 一.前言 本文给大家带来的是选择排序,其中选择排序中的堆排序在之前我们已经有过详解所以本次主要是对比排序性能,感兴趣的友友可移步观看堆排&#…

GPTs Store 推荐的学术类应用,效果怎么样?

(注:本文为小报童精选文章,已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 哪些 GPTs ,会令我们眼前一亮? 最近 GPTs Store 已经正式发布,提供了推荐应用和各分类板块目前的热门趋势…

LTC2944库仑计(电量计)芯片应用笔记(Arduino,ESP32)

一、一些基础知识 1.蓄电池的容量单位 (1)毫安时mAH 蓄电池的容量一般会采用毫安时(mAH)为单位,比如2000mAH的蓄电池意思是该蓄电池理论上可以以2000mA的电流持续放电1小时,2000mA*1H2000mAH。当然这个是…

STM32CubeMX配置定时器输入捕获功能

STM32CubeMX配置定时器输入捕获功能 0.前言一、方法简介二、STM32CubeMX配置1.生成PWM信号2.配置TIM3_CH1进行采样3.占空比计算 三、总结 参考文章:CubeMX系列教程——11 定时器输入捕获 0.前言 最近在学习江科大STM32教程的原理部分时,发现该教程中使用…

1 - 搭建Redis数据库服务器|LNP+Redis

搭建Redis数据库服务器|LNPRedis 搭建Redis数据库服务器相关概念Redis介绍安装RedisRedis服务常用管理命令命令set 、 mset 、 get 、 mget命令keys 、 type 、 exists 、 del命令ttl 、 expire 、 move 、 flushdb 、flushall 、save、shutdown 配置文件解析 LNP …

AlmaLinux 9.3 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!本次安装图解是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

深度学习记录--Momentum gradient descent

Momentum gradient descent 正常的梯度下降无法使用更大的学习率,因为学习率过大可能导致偏离函数范围,这种上下波动导致学习率无法得到提高,速度因此减慢(下图蓝色曲线) 为了减小波动,同时加快速率,可以使用momentum…

R语言学习case5:NC基于R语言的UpSetR

step1: 安装库 install.packages("UpSetR")step2:导入包 library(UpSetR)step3&#xff1a;读取数据 otu_RA <- read.delim(./otu_RA.txt, header TRUE, row.names 1, sep \t)read.delim(): 这是R语言中的一个函数&#xff0c;用于读取文本文件&#xff0c;…

国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络

国产操作系统&#xff1a;VirtualBox安装openKylin-1.0.1虚拟机并配置网络 openKylin 操作系统目前适配支持X86、ARM、RISC-V三个架构的个人电脑、平板电脑及教育开发板&#xff0c;可以满足绝大多数个人用户及开发者的使用需求。适用于在VirtualBox平台上安装openKylin-1.0.1…

Matlab/simulink风储调频,多台飞轮储能调频,风电场调频,飞轮储能带有虚拟惯量和下垂控制,三机九节点系统一次调频,离散模型

上述为不同飞轮储能容量配比&#xff0c;风电场容量配比&#xff0c;以及有无附加频率控制的飞轮储能出力分析。 飞轮储能驱动电机为永磁同步机电机PMSG 有无飞轮储能容量较小&#xff0c;所以对频率的改善效果有限&#xff0c;不过可以继续增大容量&#xff0c;从而增大频率的…

git clone超时

本文介绍作者在Centos上链接github超时&#xff0c;无法克隆的解决方案 在出现上图所示问题时&#xff0c;有可能是连接不到github.com&#xff0c;读者可以尝试输入ping github.com&#xff0c;当输入该指令后若长时间没有反应说明可能由于本地DNS无法解析导致的。 解决方案…

力扣hot100 反转链表 指针 递归 一题多解

Problem: 206. 反转链表 文章目录 思路&#x1f496; 迭代 双指针&#x1f496; 递归 思路 &#x1f468;‍&#x1f3eb; 大佬题解 &#x1f496; 迭代 双指针 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) /*** Definition for …

[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

机械设计-哈工大课程学习-螺纹连接

圆柱螺纹主要几何参数螺纹参数 ①外径&#xff08;大径&#xff09;&#xff0c;与外螺纹牙顶或内螺纹牙底相重合的假想圆柱体直径。螺纹的公称直径即大径。 ②内径&#xff08;小径&#xff09;&#xff0c;与外螺纹牙底或内螺纹牙顶相重合的假想圆柱体直径。 ③中径&#xff…

弹性调度助力企业灵活应对业务变化,高效管理云上资源

作者&#xff1a;吴昆 什么是弹性调度 云计算时代&#xff0c;企业可以通过云平台获得大量计算资源&#xff0c;并根据业务发展和流量需求的实时变化&#xff0c;灵活调整使用的资源类型与资源量。阿里云提供了多种弹性资源&#xff0c;如云服务器 ECS 和弹性容器实例 ECI&am…

MySQL的一些综合运用

一些基本的语句&#xff1a; USE dept_emp; CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); -- 添加主键 ALTER TABLE dept ADD PRIMARY KEY (deptno); -- 添加数据 INSE…

[学习笔记]刘知远团队大模型技术与交叉应用L4-Prompt-learning Delta-learning

Prompt-Learning and Delta-Tunning 背景和概览 但是从T5开始&#xff0c;大模型越来越大了。 微调很难了。 模型的趋势 Model Scaling&#xff1a;模型越来越大 Difficult Tuning&#xff1a;微调越来越难 Prompt-Learning 基本组成与流程介绍 预训练和fine-tuning有一…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目&#xff0c;运行ios环境的时候报错没有CocoaPods&#xff0c;安卓环境可以正常运行&#xff0c;当时一脸懵逼&#xff0c;网上搜索了一下&#xff0c;有给我讲原理的&#xff0c;还有让我安装这插件那插件的&#xff0c;最终把电脑搞得卡死&#x…

【机器学习300问】15、什么是逻辑回归模型?

一、逻辑回归模型是为了解决什么问题&#xff1f; 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广义线性回归分析模型&#xff0c;尤其适用于解决二分类问题&#xff08;输出为两个类别&#xff09;。 &#xff08;1&#xff09;二分类举例 邮件过滤&#xff…

HarmonyOS鸿蒙应用开发(三、轻量级配置存储dataPreferences)

在应用开发中存储一些配置是很常见的需求。在android中有SharedPreferences&#xff0c;一个轻量级的存储类&#xff0c;用来保存应用的一些常用配置。在HarmonyOS鸿蒙应用开发中&#xff0c;实现类似功能的也叫首选项&#xff0c;dataPreferences。 相关概念 ohos.data.prefe…