第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss


目录
  • 第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 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 list = super.list(Wrappers.lambdaQuery().
                                           in(Attachment::getId, ids));
        if (list.isEmpty()) {
            return;
        }
        //删除数据库中的记录
        super.removeByIds(Arrays.asList(ids));
    
        //对象格式处理
        List 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服务

    第三步:启动文件服务

    第四步:访问接口文档,地址为http://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 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 list = super.list(
            Wraps.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服务

    第三步:启动文件服务

    第四步:访问接口文档,地址为http://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全网最全的资料

    全套代码及资料全部完整提供,点此处下载