第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服务
第三步:启动文件服务
第四步:访问接口文档,地址为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全网最全的资料
第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss的更多相关文章
- 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...
- 第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio-minio全网最全的资料
目录 1. MinIO介绍 2. MinIO应用场景 2.1 单主机单硬盘模式 2.2 单主机多硬盘模式 2.3 多主机多硬盘分布式 3. MinIO特点 4. 存储机制 5. docker安装Min ...
- 第2-1-4章 SpringBoot整合FastDFS文件存储服务
目录 5 SpringBoot整合 5.1 操作步骤 5.2 项目依赖 5.3 客户端开发 5.3.1 FastDFS配置 5.3.2 FastDFS配置类 5.3.3 文件工具类 5.3.4 文件上 ...
- 第2-1-3章 docker-compose安装FastDFS,实现文件存储服务
目录 4 docker-compose安装FastDFS 4.1 docker-compose-fastdfs.yml 4.2 nginx.conf 4.3 storage.conf 4.4 测试 4 ...
- 利用ThinkPHP自带的七牛云驱动上传文件到七牛云以及删除七牛云文件方法
一.准备工作 1.注册七牛云账号 2.选择对象储存->创建空间->设置为公开 3.在config配置文件中添加以下代码 'UPLOAD_FILE_QINIU' => array ( ...
- xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限
http://blog.csdn.net/lanmanck/article/details/5722050 ---------------------------------------------- ...
- windows下自动删除n天前的文件
使用windows2003下的内置命令forfiles配合计划任务可以实现自动删除n天前的文件. windows2003中设定自动执行的计划任务很简单. 一.脚本编写 forfiles命令用法: Fo ...
- java后台简单从阿里云上传下载文件并通知前端以附件的形式保存
一. 首先开通阿里的OSS 服务 创建一个存储空间在新建一个Bucket 在你新建的bucket有所需的id和key 获取外网访问地址或者是内网 看个人需求 我使用的是外网(内网没用过 估计是部署到阿 ...
- 第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列
第48章 MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...
- 第48章 MDK的编译过程及文件类型全解
Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...
随机推荐
- KingbaseES中的参数查看与修改
KingbaseES数据库的配置参数都在kingbase.conf文件中,这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本就不能修改.数据库把这些参数分为以下几类: inter ...
- 清除已安装的rook-ceph集群
官方文档地址:https://rook.io/docs/rook/v1.8/ceph-teardown.html 如果要拆除群集并启动新群集,请注意需要清理的以下资源: rook-ceph names ...
- 使用sed在源文件上直接替换某一行的内容,只替换第一次找到的那行
sed -i 's/^mysqld_pid_file_path=.*$/mysqld_pid_file_path=\/data\/mysql\/run\/mysqld.pid/' /etc/init. ...
- Linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) "
前言 作者在2021-07-21时遇到 linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localh ...
- 自定义映射resultMap
resultMap处理字段和属性的映射关系 如果字段名与实体类中的属性名不一致,该如何处理映射关系? 第一种方法:为查询的字段设置别名,和属性名保持一致 下面是实体类中的属性名: private In ...
- 内存映射IO(MMIO)
端口I/O 介绍: 一种I/O编址方式是端口映射I/O(port-mapped I/O), CPU使用专门的I/O指令对设备进行访问, 并把设备的地址称作端口号. 在执行其中的一条指令时,CPU使用地 ...
- Centos7使用sendEmail-v1.56发送邮件
Centos7使用sendEmail-v1.56发送邮件 注意:Centos7默认使用perl5.16,而sendEmail-v.1.56要求使用perl5.10.否则会报以下错误.所以需要下载并安装 ...
- resultMap处理字段和属性的映射关系
1.resultMap处理字段和属性的映射关系 若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射 <!-- resultMap:设置自定义映射 属性: id:表示自定 ...
- java连接数据库加载驱动到java项目
java连接数据库 package com.cook.zheng; import java.sql.Connection; import java.sql.DriverManager; public ...
- vue-router(路由嵌套)
文章目录 1.项目结构 2.路由嵌套 3.界面(使用elementui) 4.效果展示 1.项目结构 2.路由嵌套 import Vue from 'vue' import Router from ' ...