第2-3-5章 刪除附件的接口開發-文件存儲服務系統-nginx/fastDFS/minio/阿里雲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全網最全的資料

全套代碼及資料全部完整提供,點此處下載