第2-3-5章 刪除附件的介面開發-文件存儲服務系統-nginx/fastDFS/minio/阿里雲oss/七牛雲oss
- 2022 年 11 月 18 日
- 筆記
- FastDFS, Java開發, minio, Nginx, 七牛雲oss, 中台, 中台戰略與組件化開發, 刪除附件, 微服務, 文件存儲服務, 阿里雲oss
5.4 介面開發-根據id刪除附件
第2-1-2章 傳統方式安裝FastDFS-附FastDFS常用命令
第2-1-3章 docker-compose安裝FastDFS,實現文件存儲服務
第2-1-5章 docker安裝MinIO實現文件存儲服務-springboot整合minio-minio全網最全的資料
5.4.1 介面文檔
根據id刪除附件介面要完成的操作主要有兩個:
- 將客戶端上傳的文件從指定存儲位置(具體存儲位置由配置文件配置的存儲策略確定)刪除
- 將文件資訊從資料庫的pd_attachment表中刪除
根據id刪除附件功能的介面文檔如下:
5.4.2 程式碼實現
第一步:在AttachmentController中提供文件刪除的方法
@ApiOperation(value = "刪除文件", notes = "刪除文件")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids[]", value = "文件ids", dataType = "array", paramType = "query"),
})
@DeleteMapping
public R<Boolean> remove(@RequestParam(value = "ids[]") Long[] ids) {
attachmentService.remove(ids);
return success(true);
}
第二步:在AttachmentService介面中擴展remove方法
/**
* 刪除附件
*
* @param ids
*/
void remove(Long[] ids);
第三步:在AttachmentServiceImpl實現類中實現remove方法
/**
*根據id刪除附件
* @param ids
*/
@Override
public void remove(Long[] ids) {
if (ArrayUtils.isEmpty(ids)) {
return;
}
//查詢資料庫
List<Attachment> list = super.list(Wrappers.<Attachment>lambdaQuery().
in(Attachment::getId, ids));
if (list.isEmpty()) {
return;
}
//刪除資料庫中的記錄
super.removeByIds(Arrays.asList(ids));
//對象格式處理
List<FileDeleteDO> fileDeleteDOList =
list.stream().map((fi) -> FileDeleteDO.builder()
.relativePath(fi.getRelativePath()) //文件在伺服器的相對路徑
.fileName(fi.getFilename()) //唯一文件名
.group(fi.getGroup()) //fastDFS返回的組 用於FastDFS
.path(fi.getPath()) //fastdfs 的路徑
.build())
.collect(Collectors.toList());
//刪除文件
fileStrategy.delete(fileDeleteDOList);
}
5.4.3 介面測試
第一步:啟動Nacos配置中心
第二步:啟動Nginx服務
第三步:啟動文件服務
第四步:訪問介面文檔,地址為//localhost:8765/doc.html
可以看到pd_attachment表中對應的記錄已經刪除掉了,對應的文件也已經被刪除掉了。
5.4.4 測試ALI和FAST_DFS以及MINIO上傳和刪除的介面
註:可以修改Nacos中的pd-file-server.yml配置文件,將存儲策略改為ALI和FAST_DFS以及MINIO來測試文件的存儲策略是否發生了變化。
5.4.4.1 阿里雲OSS上傳和刪除
- 上傳
- 刪除
- 刪除後就資源就無法訪問了
5.4.4.2 FastDFS上傳和刪除
-
上傳
-
查看資源
-
刪除操作後再查看
5.4.4.3 Minio上傳和刪除
- 上傳
- 查看minio中資源存儲情況
- 查看圖片
- 刪除圖片
- 刪除成功,資源已經不存在
5.5 介面開發-根據業務類型/業務id刪除附件
5.5.1 介面文檔
根據業務類型/業務id刪除附件介面要完成的操作主要有兩個:
- 將客戶端上傳的文件從指定存儲位置(具體存儲位置由配置文件配置的存儲策略確定)刪除
- 將文件資訊從資料庫的pd_attachment表中刪除
根據業務類型/業務id刪除附件功能的介面文檔如下:
5.5.2 程式碼實現
第一步:在AttachmentController中提供根據業務類型/業務id刪除文件的方法
@ApiOperation(value = "根據業務類型或業務id刪除文件",
notes = "根據業務類型或業務id刪除文件")
@DeleteMapping(value = "/biz")
public R<Boolean> removeByBizIdAndBizType(
@RequestBody
AttachmentRemoveDTO dto) {
attachmentService.removeByBizIdAndBizType(dto.getBizId(),
dto.getBizType());
return success(true);
}
第二步:在AttachmentService介面中擴展removeByBizIdAndBizType方法
/**
* 根據業務id/業務類型刪除附件
*
* @param bizId
* @param bizType
*/
void removeByBizIdAndBizType(String bizId, String bizType);
第三步:在AttachmentServiceImpl實現類中實現removeByBizIdAndBizType方法
/**
* 根據業務id和業務類型刪除附件
*
* @param bizId
* @param bizType
*/
@Override
public void removeByBizIdAndBizType(String bizId, String bizType) {
//根據業務類和業務id查詢資料庫
List<Attachment> list = super.list(
Wraps.<Attachment>lbQ()
.eq(Attachment::getBizId, bizId)
.eq(Attachment::getBizType, bizType));
if (list.isEmpty()) {
return;
}
//根據id刪除文件
remove(list.stream().mapToLong(
Attachment::getId).boxed().toArray(Long[]::new));
}
5.5.3 介面測試
第一步:啟動Nacos配置中心
第二步:啟動Nginx服務
第三步:啟動文件服務
第四步:訪問介面文檔,地址為//localhost:8765/doc.html
可以看到pd_attachment表中對應的記錄已經刪除掉了,對應的文件也已經被刪除掉了。
第2-1-2章 傳統方式安裝FastDFS-附FastDFS常用命令
第2-1-3章 docker-compose安裝FastDFS,實現文件存儲服務
第2-1-5章 docker安裝MinIO實現文件存儲服務-springboot整合minio-minio全網最全的資料