refactor: 文件管理数据库字段调整 (#153)

This commit is contained in:
luoqiz
2025-04-16 14:14:50 +08:00
committed by GitHub
parent 9b79990cc0
commit 943d640995
7 changed files with 28 additions and 22 deletions

View File

@@ -89,7 +89,7 @@ public class FileRecorderImpl implements FileRecorder {
file.setExtension(fileInfo.getExt()); file.setExtension(fileInfo.getExt());
file.setType(FileTypeEnum.getByExtension(file.getExtension())); file.setType(FileTypeEnum.getByExtension(file.getExtension()));
file.setContentType(fileInfo.getContentType()); file.setContentType(fileInfo.getContentType());
file.setMd5(fileInfo.getHashInfo().getSha256()); file.setSha256(fileInfo.getHashInfo().getSha256());
file.setMetadata(JSONUtil.toJsonStr(fileInfo.getMetadata())); file.setMetadata(JSONUtil.toJsonStr(fileInfo.getMetadata()));
file.setThumbnailUrl(fileInfo.getThUrl()); file.setThumbnailUrl(fileInfo.getThUrl());
file.setThumbnailSize(fileInfo.getThSize()); file.setThumbnailSize(fileInfo.getThSize());

View File

@@ -86,9 +86,9 @@ public class FileDO extends BaseDO {
private FileTypeEnum type; private FileTypeEnum type;
/** /**
* MD5 * SHA256
*/ */
private String md5; private String sha256;
/** /**
* 元数据 * 元数据

View File

@@ -87,10 +87,10 @@ public class FileResp extends BaseDetailResp {
private FileTypeEnum type; private FileTypeEnum type;
/** /**
* MD5 * SHA256
*/ */
@Schema(description = "MD5", example = "193572f83684128a0d0f993e97100f8a") @Schema(description = "SHA256", example = "722f185c48bed892d6fa12e2b8bf1e5f8200d4a70f522fb62112b6caf13cb74e")
private String md5; private String sha256;
/** /**
* 元数据 * 元数据

View File

@@ -96,7 +96,17 @@ public interface FileService extends BaseService<FileResp, FileResp, FileQuery,
.getDayOfMonth() + StringConstants.SLASH; .getDayOfMonth() + StringConstants.SLASH;
} }
/**
* 检查文件是否存在
* @param fileHash
* @return
*/
FileResp check(String fileHash); FileResp check(String fileHash);
/**
* 创建目录
* @param req
* @return
*/
IdResp<Long> createDir(FileReq req); IdResp<Long> createDir(FileReq req);
} }

View File

@@ -91,10 +91,8 @@ public class FileServiceImpl extends BaseServiceImpl<FileMapper, FileDO, FileRes
} }
UploadPretreatment uploadPretreatment = fileStorageService.of(file) UploadPretreatment uploadPretreatment = fileStorageService.of(file)
.setPlatform(storage.getCode()) .setPlatform(storage.getCode())
.setHashCalculatorMd5(true)
.setHashCalculatorSha256(true) .setHashCalculatorSha256(true)
.putAttr(ClassUtil.getClassName(StorageDO.class, false), storage) .putAttr(ClassUtil.getClassName(StorageDO.class, false), storage)
// .setPath(StrUtil.removePrefix(path, StringConstants.SLASH));
.setPath(path); .setPath(path);
// 图片文件生成缩略图 // 图片文件生成缩略图
if (FileTypeEnum.IMAGE.getExtensions().contains(FileNameUtil.extName(file.getOriginalFilename()))) { if (FileTypeEnum.IMAGE.getExtensions().contains(FileNameUtil.extName(file.getOriginalFilename()))) {
@@ -143,7 +141,7 @@ public class FileServiceImpl extends BaseServiceImpl<FileMapper, FileDO, FileRes
@Override @Override
public FileResp check(String fileHash) { public FileResp check(String fileHash) {
FileDO file = baseMapper.lambdaQuery().eq(FileDO::getMd5, fileHash).one(); FileDO file = baseMapper.lambdaQuery().eq(FileDO::getSha256, fileHash).one();
if (file != null) { if (file != null) {
return get(file.getId()); return get(file.getId());
} }
@@ -169,7 +167,7 @@ public class FileServiceImpl extends BaseServiceImpl<FileMapper, FileDO, FileRes
fileDo.setExtension("dir"); fileDo.setExtension("dir");
fileDo.setContentType(""); fileDo.setContentType("");
fileDo.setType(FileTypeEnum.DIR); fileDo.setType(FileTypeEnum.DIR);
fileDo.setMd5(""); fileDo.setSha256("");
fileDo.setStorageId(storage.getId()); fileDo.setStorageId(storage.getId());
baseMapper.insert(fileDo); baseMapper.insert(fileDo);
return new IdResp<>(fileDo.getId()); return new IdResp<>(fileDo.getId());

View File

@@ -286,7 +286,7 @@ CREATE TABLE IF NOT EXISTS `sys_file` (
`extension` varchar(100) DEFAULT NULL COMMENT '扩展名', `extension` varchar(100) DEFAULT NULL COMMENT '扩展名',
`content_type` varchar(64) NOT NULL COMMENT '内容类型', `content_type` varchar(64) NOT NULL COMMENT '内容类型',
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型0: 目录1其他2图片3文档4视频5音频', `type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型0: 目录1其他2图片3文档4视频5音频',
`md5` varchar(128) NOT NULL COMMENT 'MD5', `sha256` varchar(256) NOT NULL COMMENT 'SHA256',
`metadata` text DEFAULT NULL COMMENT '元数据', `metadata` text DEFAULT NULL COMMENT '元数据',
`thumbnail_size` bigint(20) DEFAULT NULL COMMENT '缩略图大小(字节)', `thumbnail_size` bigint(20) DEFAULT NULL COMMENT '缩略图大小(字节)',
`thumbnail_url` varchar(512) DEFAULT NULL COMMENT '缩略图URL', `thumbnail_url` varchar(512) DEFAULT NULL COMMENT '缩略图URL',
@@ -294,15 +294,14 @@ CREATE TABLE IF NOT EXISTS `sys_file` (
`storage_id` bigint(20) NOT NULL COMMENT '存储ID', `storage_id` bigint(20) NOT NULL COMMENT '存储ID',
`create_user` bigint(20) NOT NULL COMMENT '创建人', `create_user` bigint(20) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间', `create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) NOT NULL COMMENT '修改人', `update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime NOT NULL COMMENT '修改时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
INDEX `idx_url`(`url`), INDEX `idx_url`(`url`),
INDEX `idx_md5`(`md5`), INDEX `idx_sha256`(`sha256`),
INDEX `idx_type`(`type`), INDEX `idx_type`(`type`),
INDEX `idx_storage_id`(`storage_id`), INDEX `idx_storage_id`(`storage_id`),
INDEX `idx_create_user`(`create_user`), INDEX `idx_create_user`(`create_user`)
INDEX `idx_update_user`(`update_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件表';
CREATE TABLE IF NOT EXISTS `sys_client` ( CREATE TABLE IF NOT EXISTS `sys_client` (

View File

@@ -472,7 +472,7 @@ CREATE TABLE IF NOT EXISTS "sys_file" (
"extension" varchar(100) DEFAULT NULL, "extension" varchar(100) DEFAULT NULL,
"content_type" varchar(64) NOT NULL, "content_type" varchar(64) NOT NULL,
"type" int2 NOT NULL DEFAULT 1, "type" int2 NOT NULL DEFAULT 1,
"md5" varchar(128) NOT NULL, "sha256" varchar(256) NOT NULL,
"metadata" text DEFAULT NULL, "metadata" text DEFAULT NULL,
"thumbnail_size" int8 DEFAULT NULL, "thumbnail_size" int8 DEFAULT NULL,
"thumbnail_url" varchar(512) DEFAULT NULL, "thumbnail_url" varchar(512) DEFAULT NULL,
@@ -480,16 +480,15 @@ CREATE TABLE IF NOT EXISTS "sys_file" (
"storage_id" int8 NOT NULL, "storage_id" int8 NOT NULL,
"create_user" int8 NOT NULL, "create_user" int8 NOT NULL,
"create_time" timestamp NOT NULL, "create_time" timestamp NOT NULL,
"update_user" int8 NOT NULL, "update_user" int8 DEFAULT NULL,
"update_time" timestamp NOT NULL, "update_time" timestamp DEFAULT NULL,
PRIMARY KEY ("id") PRIMARY KEY ("id")
); );
CREATE INDEX "idx_file_url" ON "sys_file" ("url"); CREATE INDEX "idx_file_url" ON "sys_file" ("url");
CREATE INDEX "idx_file_type" ON "sys_file" ("type"); CREATE INDEX "idx_file_type" ON "sys_file" ("type");
CREATE INDEX "idx_file_md5" ON "sys_file" ("md5"); CREATE INDEX "idx_file_sha256" ON "sys_file" ("sha256");
CREATE INDEX "idx_file_storage_id" ON "sys_file" ("storage_id"); CREATE INDEX "idx_file_storage_id" ON "sys_file" ("storage_id");
CREATE INDEX "idx_file_create_user" ON "sys_file" ("create_user"); CREATE INDEX "idx_file_create_user" ON "sys_file" ("create_user");
CREATE INDEX "idx_file_update_user" ON "sys_file" ("update_user");
COMMENT ON COLUMN "sys_file"."id" IS 'ID'; COMMENT ON COLUMN "sys_file"."id" IS 'ID';
COMMENT ON COLUMN "sys_file"."name" IS '名称'; COMMENT ON COLUMN "sys_file"."name" IS '名称';
COMMENT ON COLUMN "sys_file"."size" IS '大小(字节)'; COMMENT ON COLUMN "sys_file"."size" IS '大小(字节)';
@@ -499,7 +498,7 @@ COMMENT ON COLUMN "sys_file"."abs_path" IS '绝对路径';
COMMENT ON COLUMN "sys_file"."extension" IS '扩展名'; COMMENT ON COLUMN "sys_file"."extension" IS '扩展名';
COMMENT ON COLUMN "sys_file"."content_type" IS '内容类型'; COMMENT ON COLUMN "sys_file"."content_type" IS '内容类型';
COMMENT ON COLUMN "sys_file"."type" IS '类型0: 目录1其他2图片3文档4视频5音频'; COMMENT ON COLUMN "sys_file"."type" IS '类型0: 目录1其他2图片3文档4视频5音频';
COMMENT ON COLUMN "sys_file"."md5" IS 'MD5'; COMMENT ON COLUMN "sys_file"."sha256" IS 'SHA256';
COMMENT ON COLUMN "sys_file"."metadata" IS '元数据'; COMMENT ON COLUMN "sys_file"."metadata" IS '元数据';
COMMENT ON COLUMN "sys_file"."thumbnail_size" IS '缩略图大小(字节)'; COMMENT ON COLUMN "sys_file"."thumbnail_size" IS '缩略图大小(字节)';
COMMENT ON COLUMN "sys_file"."thumbnail_url" IS '缩略图URL'; COMMENT ON COLUMN "sys_file"."thumbnail_url" IS '缩略图URL';