|
|
@ -4936,43 +4936,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 测试实战 |
|
|
|
|
|
|
|
### 自定义注解+AOP实战文件分享设计实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 第十六章 自定义注解+AOP实战文件分享设计实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第1集 【业务难点】查看他人分享文件列表业务设计 |
|
|
|
|
|
|
|
**简介: 【业务难点】查看他人分享文件列表业务设计** |
|
|
|
#### 【业务难点】查看他人分享文件列表业务设计 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -4980,8 +4946,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 选择部分或者全部分享的文件,或者进入对应的文件夹,转存到自己网盘 |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250209170723762.png" alt="image-20250209170723762" style="zoom:50%;" /> |
|
|
|
|
|
|
|
* 思考难点 |
|
|
|
|
|
|
|
* 上述业务逻辑如何实现? |
|
|
@ -5009,23 +4973,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第2集 AI智能化云盘-基本分享信息接口开发实战 |
|
|
|
|
|
|
|
**简介: AI智能化云盘-基本分享信息接口开发实战** |
|
|
|
#### AI智能化云盘-基本分享信息接口开发实战 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
* 用户访问分享链接,进入对应的分享文件页面 |
|
|
@ -5048,7 +4996,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 业务逻辑开发 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Override |
|
|
|
public ShareSimpleDTO simpleDetail(Long shareId) { |
|
|
|
|
|
|
@ -5074,7 +5022,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 令牌生成 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
/** |
|
|
|
* 创建分享的令牌 |
|
|
|
*/ |
|
|
@ -5126,23 +5074,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第3集 AI智能化云盘-分享链接校验码接口开发 |
|
|
|
|
|
|
|
**简介: AI智能化云盘-分享链接校验码提口开发** |
|
|
|
#### AI智能化云盘-分享链接校验码接口开发 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5160,7 +5092,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
public String checkShareCode(ShareCheckReq req) { |
|
|
|
|
|
|
|
ShareDO shareDO = shareMapper.selectOne(new QueryWrapper<ShareDO>().eq("id", req.getShareId()) |
|
|
@ -5186,27 +5118,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第4集 AI智能化云盘-查看分享详情接口开发 |
|
|
|
|
|
|
|
**简介: AI智能化云盘-查看分享详情接口开发** |
|
|
|
#### AI智能化云盘-查看分享详情接口开发 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5218,8 +5130,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
* 如何校验访问token和分享ID的关联性 |
|
|
|
* 哪些接口需要校验token,如何实现复用? |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250209182912151.png" alt="image-20250209182912151" style="zoom:20%;" /> |
|
|
|
|
|
|
|
* 业务逻辑 |
|
|
|
|
|
|
|
* 查询分享记录实体 |
|
|
@ -5230,7 +5140,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
public ShareDetailDTO detail(Long shareId) { |
|
|
|
//1、查询分享记录实体,检查分享状态 |
|
|
|
ShareDO shareDO = checkShareStatus(shareId); |
|
|
@ -5249,19 +5159,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
} |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第5集 自定义注解+AOP实现文件分享token校验实战《上》 |
|
|
|
#### 自定义注解+AOP实现文件分享token校验实战《上》 |
|
|
|
|
|
|
|
**简介: 自定义注解+AOP实现文件分享token校验实战** |
|
|
|
|
|
|
@ -5309,7 +5207,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 自定义注解`ShareCodeCheck`编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Documented |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
@Target({ElementType.METHOD}) |
|
|
@ -5319,7 +5217,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 定义切面类 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Aspect |
|
|
|
@Component |
|
|
|
@Slf4j |
|
|
@ -5351,27 +5249,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
} |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第6集 自定义注解+AOP实现文件分享token校验实战《下》 |
|
|
|
|
|
|
|
**简介: 自定义注解+AOP实现文件分享token校验实战** |
|
|
|
#### 自定义注解+AOP实现文件分享token校验实战《下》 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5380,7 +5258,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
/** |
|
|
|
* 定义 @Pointcut注解表达式, |
|
|
|
* 方式一:@annotation:当执行的方法上拥有指定的注解时生效(我们采用这) |
|
|
@ -5425,7 +5303,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 查看分享详情接口配置注解 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@GetMapping("detail") |
|
|
|
@ShareCodeCheck |
|
|
|
public JsonData detail(){ |
|
|
@ -5436,24 +5314,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 网盘分享文件转存+全链路测试实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 **愿景:"IT路上的持续充电平台,让技术不再难学"** |
|
|
|
**更多高级课程请访问 xdclass.net** |
|
|
|
|
|
|
|
### 第十七章 网盘分享文件转存+全链路测试实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第1集 查看某个分享文件夹下的文件列表接口实战 |
|
|
|
|
|
|
|
**简介: 查看某个分享文件夹下的文件列表接口实战** |
|
|
|
#### 查看某个分享文件夹下的文件列表接口实战 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
* 开发查看某个分享链接的子文件列表接口 |
|
|
@ -5471,7 +5334,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 接口开发+自定义注解 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@PostMapping("list_share_file") |
|
|
|
@ShareCodeCheck |
|
|
|
public JsonData listShareFile(@RequestBody ShareFileQueryReq req){ |
|
|
@ -5485,7 +5348,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 业务逻辑 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
public List<AccountFileDTO> listShareFile(ShareFileQueryReq req) { |
|
|
|
//1、检查分享链接状态 |
|
|
|
ShareDO shareDO = checkShareStatus(req.getShareId()); |
|
|
@ -5509,23 +5372,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第2集 网盘分享文件转存接口设计和开发实战 |
|
|
|
#### 网盘分享文件转存接口设计和开发实战 |
|
|
|
|
|
|
|
**简介: 网盘分享文件转存接口设计和开发实战** |
|
|
|
|
|
|
@ -5551,7 +5398,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 修改校验逻辑 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
private ShareDO checkShareStatus(Long shareId) { |
|
|
|
ShareDO shareDO = shareMapper.selectById(shareId); |
|
|
|
if (shareDO == null) { |
|
|
@ -5574,7 +5421,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 处理转存逻辑 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
public void transferShareFile(ShareFileTransferReq req) { |
|
|
|
|
|
|
|
// 1、分享链接是否状态准确 |
|
|
@ -5613,17 +5460,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第3集 网盘分享文件+转存全链路接口测试实战 |
|
|
|
#### 网盘分享文件+转存全链路接口测试实战 |
|
|
|
|
|
|
|
**简介: 网盘分享转存全链路接口测试实战** |
|
|
|
|
|
|
@ -5637,9 +5474,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* Bug修复 |
|
|
|
|
|
|
|
``` |
|
|
|
//计算存储空间大小,检查是否足够 |
|
|
|
if(!fileService.checkAndUpdateCapacity(req.getAccountId(),batchTransferFileList.stream() |
|
|
|
```java |
|
|
|
//计算存储空间大小,检查是否足够 if(!fileService.checkAndUpdateCapacity(req.getAccountId(),batchTransferFileList.stream() |
|
|
|
.map(accountFileDO -> accountFileDO.getFileSize() == null ? 0 : accountFileDO.getFileSize()) |
|
|
|
.mapToLong(Long::valueOf).sum())){ |
|
|
|
throw new BizException(BizCodeEnum.FILE_STORAGE_NOT_ENOUGH); |
|
|
@ -5656,32 +5492,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
* 账号B登录(登录token记得替换, 增加share-token), 转存a1目录到自己的根目录 |
|
|
|
* 账号B登录(登录token记得替换),查看自己根目录下的文件夹,还有a1目录下的子文件内容 |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250209170723762.png" alt="image-20250209170723762" style="zoom:50%;" /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 **愿景:"IT路上的持续充电平台,让技术不再难学"** |
|
|
|
**更多高级课程请访问 xdclass.net** |
|
|
|
|
|
|
|
### 第十八章 AI网盘回收站设计和编码开发实战 |
|
|
|
### AI网盘回收站设计和编码开发实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第1集 网盘回收站需求背景和业务逻辑讲解 |
|
|
|
|
|
|
|
**简介: 网盘回收站需求背景和业务逻辑讲解** |
|
|
|
#### 网盘回收站需求背景和业务逻辑讲解 |
|
|
|
|
|
|
|
* 业务需求 |
|
|
|
|
|
|
@ -5709,23 +5522,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第2集 当前用户的个人回收站文件列表开发实战 |
|
|
|
|
|
|
|
**简介: 当前用户的个人回收站文件列表开发实战** |
|
|
|
#### 当前用户的个人回收站文件列表开发实战 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5742,7 +5539,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Override |
|
|
|
public List<AccountFileDTO> listRecycleFiles(Long accountId) { |
|
|
|
|
|
|
@ -5763,19 +5560,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第3集 AI网盘彻底删除回收站文件设计和开发实战 |
|
|
|
|
|
|
|
**简介: AI网盘彻底删除回收站文件设计和开发实战** |
|
|
|
#### AI网盘彻底删除回收站文件设计和开发实战 |
|
|
|
|
|
|
|
* 需求背景 |
|
|
|
* 回收站文件用于临时存储删除的文件 |
|
|
@ -5793,7 +5578,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
public void delete(FileDelReq fileDelReq) { |
|
|
|
//文件ID数量是否合法 |
|
|
|
// 要删除的文件Ids |
|
|
@ -5822,25 +5607,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第4集 回收站查看和彻底删除回收站接口测试 |
|
|
|
|
|
|
|
**简介: 回收站查看和彻底删除回收站接口测试** |
|
|
|
#### 回收站查看和彻底删除回收站接口测试 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
* 测试查看我的回收站列表 |
|
|
@ -5848,35 +5615,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 测试实战 |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250209170723762.png" alt="image-20250209170723762" style="zoom:50%;" /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第5集 网盘回收站还原文件或者文件夹设计 |
|
|
|
|
|
|
|
**简介: 网盘回收站还原文件或者文件夹设计** |
|
|
|
#### 网盘回收站还原文件或者文件夹设计 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5884,8 +5623,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
- 支持批量恢复操作,提高用户操作效率 |
|
|
|
- 业务逻辑有哪些注意事项考虑? |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250211145958919.png" alt="image-20250211145958919" style="zoom:30%;" /> |
|
|
|
|
|
|
|
* 业务逻辑 |
|
|
|
|
|
|
|
* 检查是否满足:文件ID数量是否合法 |
|
|
@ -5896,7 +5633,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void restoreFile(FileRecycleReq req) { |
|
|
|
|
|
|
@ -5938,23 +5675,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第6集 网盘回收站还原文件接口测试实战 |
|
|
|
|
|
|
|
**简介: 网盘回收站还原文件接口测试实战** |
|
|
|
#### 网盘回收站还原文件接口测试实战 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5963,27 +5684,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 测试实战 |
|
|
|
|
|
|
|
<img src="D:/学习/2025/AI智能化云盘学习笔记/笔记/img/image-20250211145958919.png" alt="image-20250211145958919" style="zoom:30%;" /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### AI网盘文件搜索和下载功能开发实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 **愿景:"IT路上的持续充电平台,让技术不再难学"** |
|
|
|
**更多高级课程请访问 xdclass.net** |
|
|
|
|
|
|
|
### 第十九章 AI网盘文件搜索和下载功能开发实战 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第1集 网盘搜索功能需求介绍和接口设计说明 |
|
|
|
|
|
|
|
**简介: 网盘搜索功能需求介绍和接口设计说明** |
|
|
|
#### 网盘搜索功能需求介绍和接口设计说明 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -5997,7 +5700,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战 |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Override |
|
|
|
public List<AccountFileDTO> searchList(Long accountId, String search) { |
|
|
|
List<AccountFileDO> accountFileDOList = accountFileMapper.selectList(new QueryWrapper<AccountFileDO>() |
|
|
@ -6012,21 +5715,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第2集 网盘下载功能需求介绍和多方案思考选择 |
|
|
|
|
|
|
|
**简介: 网盘下载功能需求介绍和多方案思考选择** |
|
|
|
#### 网盘下载功能需求介绍和多方案思考选择 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
|
|
|
@ -6095,23 +5784,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
* 依赖于**HTTP协议中的`Range`请求头**,当浏览器发起下载请求时,可以通过`Range`头指定从文件的某个字节开始下载 |
|
|
|
* 用户存在多个浏览器,版本问题、厂商问题等 导致不支持,因此web端不做这个功能 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第3集 网盘多文件下载功能设计和开发实战 |
|
|
|
|
|
|
|
**简介: 网盘多文件下载功能设计和开发实战** |
|
|
|
#### 网盘多文件下载功能设计和开发实战 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
* 开发文件下载功能,前端请求后端,后端请求文件存储获取下载地址 |
|
|
@ -6122,7 +5795,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
|
|
|
|
* 编码实战(可以支持单个或者多个文件下载) |
|
|
|
|
|
|
|
``` |
|
|
|
```java |
|
|
|
@Override |
|
|
|
public List<DownloadUrlDTO> getDownloadUrl(FileDownloadReq req) { |
|
|
|
//获得要下载的用户文件对象 |
|
|
@ -6155,22 +5828,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){ |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 第4集 网盘下载功能相关链路测试实战和规划 |
|
|
|
|
|
|
|
**简介: 网盘下载功能相关链路测试实战和规划** |
|
|
|
#### 网盘下载功能相关链路测试实战和规划 |
|
|
|
|
|
|
|
* 需求 |
|
|
|
* 测试AI云网盘文件下载功能 |
|
|
|