diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java index 2507fb4a1..f8af5c3b3 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileInfoApi.java @@ -25,8 +25,11 @@ package cn.stylefeng.roses.kernel.file.api; import cn.stylefeng.roses.kernel.file.api.pojo.AntdvFileInfo; +import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest; import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; +import java.io.File; + /** * 获取文件信息的api * @@ -92,4 +95,15 @@ public interface FileInfoApi { */ void removeFile(Long fileId); + /** + * 上传到服务器文件,并保存文件信息到库中 + * + * @param file 原始 + * @param sysFileInfoRequest 文件附属信息(需要2个参数:是否是机密文件、bucket信息) + * @return 返回文件id等信息 + * @author fengshuonan + * @date 2022/10/19 18:24 + */ + SysFileInfoResponse uploadFileAndSave(File file, SysFileInfoRequest sysFileInfoRequest); + } diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/factory/FileInfoFactory.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/factory/FileInfoFactory.java index 7a210943c..224c75524 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/factory/FileInfoFactory.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/factory/FileInfoFactory.java @@ -42,6 +42,7 @@ 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; @@ -129,4 +130,70 @@ public class FileInfoFactory { return sysFileInfo; } + /** + * 创建文件存储的基础信息 + * + * @author fengshuonan + * @date 2022/10/19 18:37 + */ + public static SysFileInfo createSysFileInfo(File file, SysFileInfoRequest sysFileInfoRequest) { + + // 封装存储文件信息(上传替换公共信息) + SysFileInfo sysFileInfo = new SysFileInfo(); + + // 创建文件id + sysFileInfo.setFileId(IdWorker.getId()); + + // 文件编码生成 + sysFileInfo.setFileCode(IdWorker.getId()); + + // 默认版本号从1开始 + sysFileInfo.setFileVersion(1); + + // 文件状态 + 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 { + sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode()); + } + + // 文件bucket信息 + String fileBucket = FileConfigExpander.getDefaultBucket(); + if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) { + fileBucket = sysFileInfoRequest.getFileBucket(); + } + + // 原始文件名称 + sysFileInfo.setFileOriginName(file.getName()); + + // 文件后缀 + String fileSuffix = null; + if (ObjectUtil.isNotEmpty(sysFileInfo.getFileOriginName())) { + fileSuffix = StrUtil.subAfter(sysFileInfo.getFileOriginName(), FILE_POSTFIX_SEPARATOR, true); + } + + // 文件大小 kb + long fileSizeKb = Convert.toLong(NumberUtil.div(new BigDecimal(file.length()), BigDecimal.valueOf(1024)).setScale(0, BigDecimal.ROUND_HALF_UP)); + + // 计算文件大小信息 + String fileSizeInfo = FileUtil.readableFileSize(file.length()); + sysFileInfo.setFileSizeInfo(fileSizeInfo); + + // 最终存储名称 + String finalFileName = sysFileInfo.getFileId() + FILE_POSTFIX_SEPARATOR + fileSuffix; + sysFileInfo.setFileObjectName(sysFileInfoRequest.getFileObjectName()); + + // 存储的路径 + sysFileInfo.setFilePath(null); + + // 是否是机密文件 + sysFileInfo.setSecretFlag(sysFileInfoRequest.getSecretFlag()); + + return sysFileInfo; + } + } diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java index 7e46050c6..9d1b667d4 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java @@ -71,8 +71,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayOutputStream; -import java.io.IOException; +import java.io.*; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -152,8 +151,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl list = this.baseMapper.fileInfoList(page, sysFileInfoRequest); // 排除defaultAvatar.png这个图片,这个是默认头像 - List newList = list.stream().filter(i -> !i.getFileOriginName().equals(FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME)) - .collect(Collectors.toList()); + List newList = list.stream().filter(i -> !i.getFileOriginName().equals(FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME)).collect(Collectors.toList()); // 拼接图片url地址 for (SysFileInfoListResponse sysFileInfoListResponse : newList) { @@ -459,8 +456,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl