【7.2.5】【file】增加一个本地保存文件的方法

pull/40/MERGE
fengshuonan 2022-10-19 18:59:17 +08:00
parent eb4dadec42
commit 5ff54f1fe1
3 changed files with 108 additions and 8 deletions

View File

@ -25,8 +25,11 @@
package cn.stylefeng.roses.kernel.file.api; package cn.stylefeng.roses.kernel.file.api;
import cn.stylefeng.roses.kernel.file.api.pojo.AntdvFileInfo; 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 cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse;
import java.io.File;
/** /**
* api * api
* *
@ -92,4 +95,15 @@ public interface FileInfoApi {
*/ */
void removeFile(Long fileId); void removeFile(Long fileId);
/**
*
*
* @param file
* @param sysFileInfoRequest 2bucket
* @return id
* @author fengshuonan
* @date 2022/10/19 18:24
*/
SysFileInfoResponse uploadFileAndSave(File file, SysFileInfoRequest sysFileInfoRequest);
} }

View File

@ -42,6 +42,7 @@ import cn.stylefeng.roses.kernel.file.modular.service.SysFileStorageService;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -129,4 +130,70 @@ public class FileInfoFactory {
return sysFileInfo; 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;
}
} }

View File

@ -71,8 +71,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream; import java.io.*;
import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -152,8 +151,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
// 拼接文件可直接访问的url // 拼接文件可直接访问的url
String fileAuthUrl; String fileAuthUrl;
if (YesOrNotEnum.Y.getCode().equals(sysFileInfoRequest.getSecretFlag())) { if (YesOrNotEnum.Y.getCode().equals(sysFileInfoRequest.getSecretFlag())) {
fileAuthUrl = fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), fileAuthUrl = fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000);
FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000);
} else { } else {
fileAuthUrl = fileOperatorApi.getFileUnAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName()); fileAuthUrl = fileOperatorApi.getFileUnAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName());
} }
@ -245,8 +243,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
List<SysFileInfoListResponse> list = this.baseMapper.fileInfoList(page, sysFileInfoRequest); List<SysFileInfoListResponse> list = this.baseMapper.fileInfoList(page, sysFileInfoRequest);
// 排除defaultAvatar.png这个图片,这个是默认头像 // 排除defaultAvatar.png这个图片,这个是默认头像
List<SysFileInfoListResponse> newList = list.stream().filter(i -> !i.getFileOriginName().equals(FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME)) List<SysFileInfoListResponse> newList = list.stream().filter(i -> !i.getFileOriginName().equals(FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME)).collect(Collectors.toList());
.collect(Collectors.toList());
// 拼接图片url地址 // 拼接图片url地址
for (SysFileInfoListResponse sysFileInfoListResponse : newList) { for (SysFileInfoListResponse sysFileInfoListResponse : newList) {
@ -459,8 +456,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
return this.sysFileStorageService.getFileAuthUrl(String.valueOf(fileId)); return this.sysFileStorageService.getFileAuthUrl(String.valueOf(fileId));
} else { } else {
// 返回第三方存储文件url // 返回第三方存储文件url
return fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), return fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), FileConfigExpander.getDefaultFileTimeoutSeconds());
FileConfigExpander.getDefaultFileTimeoutSeconds());
} }
} }
@ -506,6 +502,29 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
this.deleteReally(sysFileInfoRequest); this.deleteReally(sysFileInfoRequest);
} }
@Override
public SysFileInfoResponse uploadFileAndSave(File file, SysFileInfoRequest sysFileInfoRequest) {
// 创建文件信息
SysFileInfo sysFileInfo = FileInfoFactory.createSysFileInfo(file, sysFileInfoRequest);
// 保存文件到库中
this.save(sysFileInfo);
// 保存文件到存储中
try {
this.fileOperatorApi.storageFile(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), new FileInputStream(file));
} catch (FileNotFoundException e) {
log.warn("保存文件到storage中出错!", e);
}
// 转化响应
SysFileInfoResponse fileUploadInfoResult = new SysFileInfoResponse();
BeanUtil.copyProperties(sysFileInfo, fileUploadInfoResult);
return fileUploadInfoResult;
}
/** /**
* servletresponse * servletresponse
* *