当前位置:网站首页>文件 - 07 删除文件: 根据fileIds批量删除文件及文件信息
文件 - 07 删除文件: 根据fileIds批量删除文件及文件信息
2022-07-31 05:48:00 【追风筝~】
系列文章:
文件 - 01 上传附件到服务器并保存信息到MySQL
文件 - 02 上传临时文件到服务器
文件 - 03 根据文件id获取下载链接
文件 - 04 根据文件下载链接下载文件
文件 - 05 根据文件Id下载文件
文件 - 06 根据文件id/图片id回显给前端
附件表:
CREATE TABLE `t_upload_file` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fileId` varchar(50) NOT NULL COMMENT '文件id',
`fileName` varchar(50) NOT NULL COMMENT '文件名',
`fileType` varchar(100) NOT NULL COMMENT '文件类型',
`fileSize` int(10) NOT NULL COMMENT '文件大小bytes',
`filePathSuffix` varchar(60) NOT NULL COMMENT '文件存储路径',
`fileUploader` varchar(32) DEFAULT NULL,
`uploadTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件上传时间',
`lastUsedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文件最近使用时间',
`neverExpire` tinyint(1) NOT NULL DEFAULT '1' COMMENT '文件是否永不过期,当为1时,则忽略expireTime',
`expireTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '文件过期时间',
PRIMARY KEY (`id`),
UNIQUE KEY `fileId` (`fileId`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
1. FileController
@RestController
@ResponseBody
@ResponseResult
@Slf4j
@RequestMapping("/ngsoc/PORTAL/api/v1")
public class FileController {
@ApiOperation(value = "根据fileIds批量删除文件", notes = "根据fileIds批量删除文件及文件信息", httpMethod = "DELETE")
@DeleteMapping(value = "/files")
public void deleteFiles(
@ApiParam(value = "文件名列表", required = true) @RequestBody List<String> fileIds
) {
fileService.deleteFileByIds(fileIds);
}
}
2. FileServiceImpl
public interface IFileService {
/** * 根据文件id列表批量删除文件 * * @param fileIds 文件id列表 */
void deleteFileByIds(List<String> fileIds);
}
@Controller
@Slf4j
public class FileServiceImpl implements IFileService {
@Autowired
private IFileMapper fileDao;
@Autowired
private FileConfig fileConfig;
@Autowired
private RedisTemplate<String, String> stringRedisTemplate;
@Setter(onMethod_ = @Autowired)
private FileIdAuthorityServiceImpl fileIdAuthorityServiceImpl;
@Override
public void deleteFileByIds(List<String> fileIds) {
for (String fileId : fileIds) {
deleteFileById(fileId, true);
}
}
@Override
public void deleteFileById(String fileId, boolean checkAuth) {
// 删除文件 1. getFileInfo --> path --> delete file
// 2. clear mysql info
// 3. redis will expire automatically
// 4. 如果期间有根据token/id下载 就会出错
FileInfo fileInfo = this.getFileInfo(fileId);
if (fileInfo == null) {
return;
}
if (checkAuth) {
fileIdAuthorityServiceImpl.assertThisUserHaveAuthority(fileInfo);
}
String pathSuffix = fileInfo.getFilePathSuffix();
String storePath = fileConfig.getSavePath().concat(pathSuffix);
// 刪除服务器保存的文件
// 如果文件已经不存在,返回True
boolean delSucceed = FileUtil.del(storePath);
if (delSucceed) {
// 删除文件信息
fileDao.deleteFileInfo(fileId);
}
}
}
3. IFileMapper
@Mapper
@Repository
public interface IFileMapper {
/** * 根据fileId删除文件信息 * * @param fileId 文件id */
void deleteFileInfo(@Param("fileId") String fileId);
}
<delete id="deleteFileInfo" parameterType="String">
delete
from t_upload_file
where fileId = #{fileId} and <include refid="unexpiredFilter"/>
</delete>
边栏推荐
- 如何在uni-app中选择一个合适的UI组件库
- Analysis of pseudo-classes and pseudo-elements
- 数据库原理作业2 — JMU
- 【TA-霜狼_may-《百人计划》】美术2.3 硬表面基础
- 浅层了解欧拉函数
- CHI论文阅读(1)EmoGlass: an End-to-End AI-Enabled Wearable Platform for Enhancing Self-Awareness of Emoti
- DDL+DML+DQL
- codec2 BlockPool:unreadable libraries
- PXE高效批量网络装机
- 一文读懂 MongoDB 和 MySQL 的差异
猜你喜欢

Database Principles Homework 2 — JMU

使用powerDesigner反向工程生成Entity

Difficulty comparison between high concurrency and multithreading (easy to confuse)

关于求反三角函数的三角函数值

Web浏览器工作流程解析

How to use repeating-linear-gradient

英语翻译软件-批量自动免费翻译软件支持三方接口翻译

服务器和客户端信息的获取

外贸网站优化-外贸网站优化教程-外贸网站优化软件

DirectExchange switch simple introduction demo
随机推荐
拉格朗日插值及其应用
Koa框架的基本使用
银河麒麟服务器v10 sp2安装oracle19c
Third-party library-store
【TA-霜狼_may-《百人计划》】美术2.3 硬表面基础
二叉树的还原(反序列化)
安装和使用uView
自动翻译软件-批量批量自动翻译软件推荐
shell之条件语句(test、if、case)
DirectExchange switch simple introduction demo
One of the small practical projects - food alliance ordering system
Project exercise - memorandum (add, delete, modify, check)
Database Principles Homework 3 — JMU
讲解实例+详细介绍@Resource与@Autowired注解的区别(全网最全)
MySQL的触发器
剑指offer(一)
tidyverse笔记——tidyr包
Zotero | Zotero translator插件更新 | 解决百度学术文献无法获取问题
tidyverse笔记——dplyr包
nohup原理