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

news2024/11/24 14:05:04

文章目录

      • 5.4 接口开发-根据id删除附件
        • 5.4.1 接口文档
        • 5.4.2 代码实现
        • 5.4.3 接口测试
        • 5.4.4 测试ALI和FAST_DFS以及MINIO上传和删除的接口
          • 5.4.4.1 阿里云OSS上传和删除
          • 5.4.4.2 FastDFS上传和删除
          • 5.4.4.3 Minio上传和删除
      • 5.5 接口开发-根据业务类型/业务id删除附件
        • 5.5.1 接口文档
        • 5.5.2 代码实现
        • 5.5.3 接口测试

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服务

第三步:启动文件服务

第四步:访问接口文档,地址为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<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服务

第三步:启动文件服务

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

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

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

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

相关文章

[附源码]SSM计算机毕业设计成都团结石材城商家协作系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

力扣(LeetCode)6. Z 字形变换(C++)

数学构造 ZZZ 字形变换类似情报加密。找规律解密&#xff0c;就能得到构造的方法。 第 000 行相邻的数&#xff0c;取 n4n4n4 如上图&#xff0c;观察第 000 行和第 333 行 相邻的数&#xff0c;组成等差数列&#xff0c;公差 d62n−2d62n-2d62n−2 2n−22n-22n−2 是说 &…

【小程序】微信小程序云开发笔记详细教程(建议收藏)

1- 前言 1.1 微信云开发是什么&#xff1f; 微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。 开发者可以使用云开发快速开发小程序、小游戏、公众号网页等&#xff0c;并且原生打通微信开放能力。 开发者无需搭建服务器&#xff0c;可免鉴权直接使用平台提供的…

Spring Cloud | 实现Eureka Server 高可用服务注册中心全套解决方案

目录1、在搭建Eureka Server&#xff0c;配置高可用服务注册中心&#xff0c;配置3个Eureka Server:2、因为是在本地实现的话&#xff0c;需要在localhost加入三个服务&#xff0c;需要改变etc/hosts&#xff0c;linux系统通过vim /etc/hosts&#xff0c;3、如果是在测试或者是…

最优孤岛划分下含分布式电源配电网可靠性评估附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

小学生python游戏编程arcade----坦克大战(1)

小学生python游戏编程arcade----坦克大战&#xff08;1&#xff09;前言坦克类&#xff0c;地图&#xff0c;角色的控制&#xff0c;声音等前期学习的汇总1、坦克类2、title地图加载2.1设置&#xff0c;tank类的引入2.2 角色的引入2.3 效果图2.4 代码实现总结源码获取前言 接上…

kafka学习之基本概念

一、kafka常用基本概念 producer&#xff1a;生产者&#xff0c;生产并发送消息的一方。 consumer&#xff1a;消费者&#xff0c;接收消费消息的一方。 topic&#xff1a;一类消息的集合。在kafka中&#xff0c;消息以主题为单位进行归类&#xff0c;producer负责将消息发送…

云服务器 宝塔部署SpringBoot前后端分离项目

&#x1f986;博主介绍&#xff1a;小黄鸭技术 &#x1f308;擅长领域&#xff1a;Java、实用工具、运维 &#x1f440; 系列专栏&#xff1a;&#x1f4e2;开发工具 Java之路 八股文之路 &#x1f4e7;如果文章写作时有错误的地方&#xff0c;请各位大佬指正&#xff0c;一起进…

舆情监控究竟是什么?怎么运作的?

本文首发于&#xff1a;行者AI谛听 随着互联网的加速变化&#xff0c;舆论已成为影响国家政治、社会生活和公众情绪的重要因素&#xff0c;也是影响企业形象和长远发展的重要因素。能及时收集精准措施以及预防减少和消除舆论带来的影响&#xff0c;是行业长远发展的关键条件。下…

泰凌微蓝牙 HCI层事件的注册和使用

Controler HCI event是通过HCI将Controller所有的event报告给Host HCI event是按BLE Spec标准设计的&#xff0c;是BLE Controller和Host用来交互的事件&#xff1b;GAP event是BLE host定义的一些协议栈流程交互时间通知型事件。 HCI event类型 #define HCI_EVT_DISCONNEC…

【Hack The Box】windows练习-- Object

HTB 学习笔记 【Hack The Box】windows练习-- Object &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1…

链表oj题(第一弹)

通过前两篇博客我们了解了链表的实现&#xff0c;那么今天我们来看看链表的oj题是如何完成的。 1、移除链表元素 题目要求我们删掉与val相同的节点。 方法一&#xff1a;我们可以写一个循环&#xff0c;首先创建两个节点&#xff0c;一个头节点&#xff0c;一个尾节点&#x…

Jmeter常用函数__V和__intSum

文章目录一、__V详解1、作用2、示例二、__intSum详解1、作用2、示例三、示例--随机用户名四、示例--随机对应的用户名和密码一、__V详解 1、作用 执行变量表达式&#xff0c;并返回执行的结果可以执行嵌套函数 2、示例 1、固定值和随机数组合 ${__V(1.${__Random(1,10,)})}…

[附源码]java毕业设计民宿客栈管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[Python]Django 模型

&#x1f349; 前言 系列文章目录 [Python]目录 文章目录&#x1f349; 前言&#x1f349; Django 模型&#x1f349; 定义模型&#x1f95d; 语法&#x1f95d; 常用模型字段类型&#x1f951; AutoField&#x1f951; BooleanField&#x1f951; NullBooleanField&#x1f95…

【服务器搭建】教程二:快速搭建我们服务器 进来看

前言&#xff1a; 购买一台服务器&#xff0c;再来个域名&#xff0c;搭建一个自己的个人博客&#xff0c;把一些教程、源码、想要分享的好玩的放到博客上&#xff0c;供小伙伴学习玩耍使用。 我把这个过程记录下来&#xff0c;想要尝试的小伙伴&#xff0c;可以按照步骤&#…

Jmeter连接数据库_postgresql

文章目录一、下载驱动包&#xff08;.jar&#xff09;1. 下载对应的安装包2、放在Jmeter的lib目录下二、Jmeter中的操作1、测试计划2、JDBC Connection Configuration3、JDBC Request三、具体示例一、下载驱动包&#xff08;.jar&#xff09; 不同的数据区需要的驱动包不同&am…

Systemd Rsync 文件定时同步

1. 环境 操作系统&#xff1a;CentOS 7 主机&#xff1a; master 192.168.0.98backup 192.168.0.166 目标&#xff1a;每天凌晨3点从master 上/www增量的复制到backup上。 2. 配置主机的免密登录 在Backup上配置主机的免密登录,请参考 SSH 公钥免密登录[1] 3. Rsync 服…

一只程序猿很黄很暴力的日记

一些基础概念&#xff1a; Socket(s)&#xff1a;主板上面的物理 CPU 插槽。 Core(s)&#xff1a;一个 CPU 一般包含 2~4 个 core&#xff0c;即 Core(s) per socket。 Thread(s)&#xff1a;一个 core 包含多个可以并行处理任务的 thread&#xff0c;即 Thread(s) per core…

MySQL8.0优化 - SQL执行流程

文章目录学习资料SQL执行流程MySQL执行流程图查询流程1.查询缓存2.解析器3.优化器4.执行器学习资料 【MySQL数据库教程天花板&#xff0c;mysql安装到mysql高级&#xff0c;强&#xff01;硬&#xff01;-哔哩哔哩】 【阿里巴巴Java开发手册】https://www.w3cschool.cn/aliba…