mirror of https://gitee.com/stylefeng/roses
【7.2.5】【file】增加一个本地保存文件的方法
parent
eb4dadec42
commit
5ff54f1fe1
|
@ -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 文件附属信息(需要2个参数:是否是机密文件、bucket信息)
|
||||||
|
* @return 返回文件id等信息
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/10/19 18:24
|
||||||
|
*/
|
||||||
|
SysFileInfoResponse uploadFileAndSave(File file, SysFileInfoRequest sysFileInfoRequest);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 渲染被预览的文件到servlet的response流中
|
* 渲染被预览的文件到servlet的response流中
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue