-
第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛
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表中对应的记录已经删除掉了,对应的文件也已经被删除掉了。
全套代码及资料全部完整提供,点此处下载
https://download.csdn.net/download/weixin_42208775/86977883
出处:https://www.cnblogs.com/gitBook/p/16901982.html