【7.2.5】【file】整理文件上传的内容

pull/40/MERGE
fengshuonan 2022-10-19 20:36:11 +08:00
parent 049062e5a0
commit 624ba3c15c
2 changed files with 70 additions and 70 deletions

View File

@ -33,17 +33,13 @@ import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
import cn.stylefeng.roses.kernel.file.api.enums.FileLocationEnum;
import cn.stylefeng.roses.kernel.file.api.enums.FileStatusEnum;
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum;
import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander;
import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest;
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
import cn.stylefeng.roses.kernel.file.modular.service.SysFileStorageService;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_POSTFIX_SEPARATOR;
@ -57,76 +53,70 @@ import static cn.stylefeng.roses.kernel.file.api.constants.FileConstants.FILE_PO
public class FileInfoFactory {
/**
*
*
*
* @author majianguo
* @date 2020/12/27 12:55
* @author fengshuonan
* @date 2022/10/19 20:19
*/
public static SysFileInfo createSysFileInfo(MultipartFile file, SysFileInfoRequest sysFileInfoRequest) {
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
SysFileStorageService fileStorageService = SpringUtil.getBean(SysFileStorageService.class);
// 封装存储文件信息(上传替换公共信息)
SysFileInfo sysFileInfo = new SysFileInfo();
// 生成文件的唯一id
Long fileId = IdWorker.getId();
sysFileInfo.setFileId(fileId);
// 文件编码生成
sysFileInfo.setFileCode(IdWorker.getId());
// 默认版本号从1开始
sysFileInfo.setFileVersion(1);
// 文件状态
sysFileInfo.setFileStatus(FileStatusEnum.NEW.getCode());
// 如果是存在数据库库里单独处理一下如果不是存储到库里则读取当前fileApi的存储位置
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
sysFileInfo.setFileLocation(FileLocationEnum.DB.getCode());
} else {
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode());
}
// 桶名
String fileBucket = FileConfigExpander.getDefaultBucket();
if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) {
fileBucket = sysFileInfoRequest.getFileBucket();
}
sysFileInfo.setFileBucket(fileBucket);
// 获取文件原始名称
String originalFilename = file.getOriginalFilename();
sysFileInfo.setFileOriginName(originalFilename);
// 获取文件后缀(不包含点)
String fileSuffix = null;
if (ObjectUtil.isNotEmpty(originalFilename)) {
fileSuffix = StrUtil.subAfter(originalFilename, FILE_POSTFIX_SEPARATOR, true);
}
// 生成文件的最终名称
String finalFileName = fileId + FILE_POSTFIX_SEPARATOR + fileSuffix;
// 桶名
String fileBucket = FileConfigExpander.getDefaultBucket();
// 存储文件
byte[] bytes;
try {
bytes = file.getBytes();
if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) {
fileBucket = sysFileInfoRequest.getFileBucket();
}
// 如果是存在数据库库里,单独处理一下
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
fileStorageService.saveFile(fileId, bytes);
} else {
fileOperatorApi.storageFile(fileBucket, finalFileName, bytes);
}
} catch (IOException e) {
throw new FileException(FileExceptionEnum.ERROR_FILE, e.getMessage());
}
sysFileInfo.setFileSuffix(fileSuffix);
// 计算文件大小kb
long fileSizeKb = Convert.toLong(NumberUtil.div(new BigDecimal(file.getSize()), BigDecimal.valueOf(1024)).setScale(0, BigDecimal.ROUND_HALF_UP));
sysFileInfo.setFileSizeKb(fileSizeKb);
// 计算文件大小信息
String fileSizeInfo = FileUtil.readableFileSize(file.getSize());
// 封装存储文件信息(上传替换公共信息)
SysFileInfo sysFileInfo = new SysFileInfo();
sysFileInfo.setFileId(fileId);
// 如果是存在数据库库里,单独处理一下
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
sysFileInfo.setFileLocation(FileLocationEnum.DB.getCode());
} else {
sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode());
}
sysFileInfo.setFileBucket(fileBucket);
sysFileInfo.setFileObjectName(finalFileName);
sysFileInfo.setFileOriginName(originalFilename);
sysFileInfo.setFileSuffix(fileSuffix);
sysFileInfo.setFileSizeKb(fileSizeKb);
sysFileInfo.setFileSizeInfo(fileSizeInfo);
sysFileInfo.setFileStatus(FileStatusEnum.NEW.getCode());
// 生成文件的最终名称存储在storage的名称
String finalFileName = fileId + FILE_POSTFIX_SEPARATOR + fileSuffix;
sysFileInfo.setFileObjectName(finalFileName);
// 文件密级
sysFileInfo.setSecretFlag(sysFileInfoRequest.getSecretFlag());
// 返回结果
return sysFileInfo;
}
@ -154,10 +144,10 @@ public class FileInfoFactory {
sysFileInfo.setFileStatus(FileStatusEnum.NEW.getCode());
// 如果是存在数据库库里单独处理一下如果不是存储到库里则读取当前fileApi的存储位置
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
sysFileInfo.setFileLocation(FileLocationEnum.DB.getCode());
} else {
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode());
}
@ -166,6 +156,7 @@ public class FileInfoFactory {
if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) {
fileBucket = sysFileInfoRequest.getFileBucket();
}
sysFileInfo.setFileBucket(fileBucket);
// 原始文件名称
sysFileInfo.setFileOriginName(file.getName());
@ -175,6 +166,7 @@ public class FileInfoFactory {
if (ObjectUtil.isNotEmpty(sysFileInfo.getFileOriginName())) {
fileSuffix = StrUtil.subAfter(sysFileInfo.getFileOriginName(), FILE_POSTFIX_SEPARATOR, true);
}
sysFileInfo.setFileSuffix(fileSuffix);
// 文件大小 kb
long fileSizeKb = Convert.toLong(NumberUtil.div(new BigDecimal(file.length()), BigDecimal.valueOf(1024)).setScale(0, BigDecimal.ROUND_HALF_UP));
@ -188,9 +180,6 @@ public class FileInfoFactory {
String finalFileName = sysFileInfo.getFileId() + FILE_POSTFIX_SEPARATOR + fileSuffix;
sysFileInfo.setFileObjectName(finalFileName);
// 存储的路径
sysFileInfo.setFilePath(null);
// 是否是机密文件
sysFileInfo.setSecretFlag(sysFileInfoRequest.getSecretFlag());

View File

@ -135,15 +135,23 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
// 文件请求转换存入数据库的附件信息
SysFileInfo sysFileInfo = FileInfoFactory.createSysFileInfo(file, sysFileInfoRequest);
// 默认版本号从1开始
sysFileInfo.setFileVersion(1);
// 文件编码生成
sysFileInfo.setFileCode(IdWorker.getId());
// 保存附件到附件信息表
// 保存文件信息
this.save(sysFileInfo);
// 存储文件到云或者本地
try {
byte[] bytes = file.getBytes();
// 如果是存在数据库库里,单独处理
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
sysFileStorageService.saveFile(sysFileInfo.getFileId(), bytes);
} else {
fileOperatorApi.storageFile(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), bytes);
}
} catch (IOException e) {
throw new FileException(FileExceptionEnum.ERROR_FILE, e.getMessage());
}
// 返回文件信息体
SysFileInfoResponse fileUploadInfoResult = new SysFileInfoResponse();
BeanUtil.copyProperties(sysFileInfo, fileUploadInfoResult);
@ -165,30 +173,33 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
Long fileCode = sysFileInfoRequest.getFileCode();
// 转换存入数据库的附件信息
SysFileInfo sysFileInfo = FileInfoFactory.createSysFileInfo(file, sysFileInfoRequest);
sysFileInfo.setDelFlag(YesOrNotEnum.Y.getCode());
sysFileInfo.setFileCode(fileCode);
// 查询该code下的最新版本号附件信息
LambdaQueryWrapper<SysFileInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysFileInfo::getFileCode, fileCode);
queryWrapper.eq(SysFileInfo::getDelFlag, YesOrNotEnum.N.getCode());
queryWrapper.eq(SysFileInfo::getFileStatus, FileStatusEnum.NEW.getCode());
SysFileInfo fileInfo = this.getOne(queryWrapper);
if (ObjectUtil.isEmpty(fileInfo)) {
SysFileInfo oldFileInfo = this.getOne(queryWrapper);
if (ObjectUtil.isEmpty(oldFileInfo)) {
throw new FileException(FileExceptionEnum.NOT_EXISTED);
}
// 旧文件状态的改变
oldFileInfo.setFileStatus(FileStatusEnum.OLD.getCode());
this.updateById(oldFileInfo);
// 创建新文件信息
SysFileInfo newFileInfo = FileInfoFactory.createSysFileInfo(file, sysFileInfoRequest);
// 设置版本号在原本的基础上加一
sysFileInfo.setFileVersion(fileInfo.getFileVersion() + 1);
newFileInfo.setFileCode(fileCode);
newFileInfo.setFileVersion(oldFileInfo.getFileVersion() + 1);
// 存储新版本文件信息
this.save(sysFileInfo);
this.save(newFileInfo);
// 返回文件信息体
SysFileInfoResponse fileUploadInfoResult = new SysFileInfoResponse();
BeanUtil.copyProperties(sysFileInfo, fileUploadInfoResult);
BeanUtil.copyProperties(newFileInfo, fileUploadInfoResult);
return fileUploadInfoResult;
}