mirror of https://gitee.com/stylefeng/roses
【7.1.6】【file】增加file_storage表,用来存储系统默认图片
parent
559a74ace5
commit
82484c9cd6
File diff suppressed because one or more lines are too long
|
@ -53,7 +53,12 @@ public enum FileLocationEnum {
|
||||||
/**
|
/**
|
||||||
* 本地
|
* 本地
|
||||||
*/
|
*/
|
||||||
LOCAL(4);
|
LOCAL(4),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据库中
|
||||||
|
*/
|
||||||
|
DB(5);
|
||||||
|
|
||||||
private final Integer code;
|
private final Integer code;
|
||||||
|
|
||||||
|
|
|
@ -106,14 +106,4 @@ public class FileConfigExpander {
|
||||||
return ConfigContext.me().getSysConfigValueWithDefault("SYS_LOCAL_FILE_SAVE_PATH_WINDOWS", String.class, new LocalFileProperties().getLocalFileSavePathWin());
|
return ConfigContext.me().getSysConfigValueWithDefault("SYS_LOCAL_FILE_SAVE_PATH_WINDOWS", String.class, new LocalFileProperties().getLocalFileSavePathWin());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 默认的系统头像,base64编码的
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2020/12/29 20:10
|
|
||||||
*/
|
|
||||||
public static String getDefaultAvatarBase64() {
|
|
||||||
return ConfigContext.me().getSysConfigValueWithDefault("SYS_DEFAULT_AVATAR_BASE64", String.class, FileConstants.DEFAULT_BASE_64_AVATAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,10 @@ public class SysFileInfoController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件
|
* 上传文件
|
||||||
|
* <p>
|
||||||
|
* 支持上传到数据库,参数fileLocation传递5即可
|
||||||
|
* <p>
|
||||||
|
* fileLocation传递其他值或不传值,不能决定文件上传到本地还是阿里云或其他地方
|
||||||
*
|
*
|
||||||
* @author majianguo
|
* @author majianguo
|
||||||
* @date 2020/12/27 13:17
|
* @date 2020/12/27 13:17
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package cn.stylefeng.roses.kernel.file.modular.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件存储信息实例类
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/01/08 15:53
|
||||||
|
*/
|
||||||
|
@TableName("sys_file_storage")
|
||||||
|
@Data
|
||||||
|
public class SysFileStorage {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件主键id,关联file_info表的主键
|
||||||
|
*/
|
||||||
|
@TableId(value = "file_id", type = IdType.ASSIGN_ID)
|
||||||
|
private Long fileId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 具体文件的字节信息
|
||||||
|
*/
|
||||||
|
@TableField("file_bytes")
|
||||||
|
private byte[] fileBytes;
|
||||||
|
|
||||||
|
}
|
|
@ -31,12 +31,14 @@ import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
|
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.enums.FileStatusEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
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.exception.enums.FileExceptionEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander;
|
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.api.pojo.request.SysFileInfoRequest;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
|
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 com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@ -62,6 +64,7 @@ public class FileInfoFactory {
|
||||||
public static SysFileInfo createSysFileInfo(MultipartFile file, SysFileInfoRequest sysFileInfoRequest) {
|
public static SysFileInfo createSysFileInfo(MultipartFile file, SysFileInfoRequest sysFileInfoRequest) {
|
||||||
|
|
||||||
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
|
FileOperatorApi fileOperatorApi = SpringUtil.getBean(FileOperatorApi.class);
|
||||||
|
SysFileStorageService fileStorageService = SpringUtil.getBean(SysFileStorageService.class);
|
||||||
|
|
||||||
// 生成文件的唯一id
|
// 生成文件的唯一id
|
||||||
Long fileId = IdWorker.getId();
|
Long fileId = IdWorker.getId();
|
||||||
|
@ -88,7 +91,12 @@ public class FileInfoFactory {
|
||||||
if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) {
|
if (StrUtil.isNotEmpty(sysFileInfoRequest.getFileBucket())) {
|
||||||
fileBucket = sysFileInfoRequest.getFileBucket();
|
fileBucket = sysFileInfoRequest.getFileBucket();
|
||||||
}
|
}
|
||||||
|
// 如果是存在数据库库里,单独处理一下
|
||||||
|
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
|
||||||
|
fileStorageService.saveFile(fileId, bytes);
|
||||||
|
} else {
|
||||||
fileOperatorApi.storageFile(fileBucket, finalFileName, bytes);
|
fileOperatorApi.storageFile(fileBucket, finalFileName, bytes);
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new FileException(FileExceptionEnum.ERROR_FILE, e.getMessage());
|
throw new FileException(FileExceptionEnum.ERROR_FILE, e.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -102,7 +110,12 @@ public class FileInfoFactory {
|
||||||
// 封装存储文件信息(上传替换公共信息)
|
// 封装存储文件信息(上传替换公共信息)
|
||||||
SysFileInfo sysFileInfo = new SysFileInfo();
|
SysFileInfo sysFileInfo = new SysFileInfo();
|
||||||
sysFileInfo.setFileId(fileId);
|
sysFileInfo.setFileId(fileId);
|
||||||
|
// 如果是存在数据库库里,单独处理一下
|
||||||
|
if (FileLocationEnum.DB.getCode().equals(sysFileInfoRequest.getFileLocation())) {
|
||||||
|
sysFileInfo.setFileLocation(FileLocationEnum.DB.getCode());
|
||||||
|
} else {
|
||||||
sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode());
|
sysFileInfo.setFileLocation(fileOperatorApi.getFileLocationEnum().getCode());
|
||||||
|
}
|
||||||
sysFileInfo.setFileBucket(fileBucket);
|
sysFileInfo.setFileBucket(fileBucket);
|
||||||
sysFileInfo.setFileObjectName(finalFileName);
|
sysFileInfo.setFileObjectName(finalFileName);
|
||||||
sysFileInfo.setFileOriginName(originalFilename);
|
sysFileInfo.setFileOriginName(originalFilename);
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package cn.stylefeng.roses.kernel.file.modular.mapper;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileStorage;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件存储信息 Mapper 接口
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/01/08 15:53
|
||||||
|
*/
|
||||||
|
public interface SysFileStorageMapper extends BaseMapper<SysFileStorage> {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="cn.stylefeng.roses.kernel.file.modular.mapper.SysFileStorageMapper">
|
||||||
|
|
||||||
|
</mapper>
|
|
@ -0,0 +1,40 @@
|
||||||
|
package cn.stylefeng.roses.kernel.file.modular.service;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileStorage;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件存储信息 服务类
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/01/08 15:53
|
||||||
|
*/
|
||||||
|
public interface SysFileStorageService extends IService<SysFileStorage> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将文件存储在库中
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/8 16:08
|
||||||
|
*/
|
||||||
|
void saveFile(Long fileId, byte[] bytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件的访问url
|
||||||
|
*
|
||||||
|
* @param fileId 文件id
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/8 16:12
|
||||||
|
*/
|
||||||
|
String getFileAuthUrl(String fileId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件不带鉴权的访问url
|
||||||
|
*
|
||||||
|
* @param fileId 文件id
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/1/8 16:12
|
||||||
|
*/
|
||||||
|
String getFileUnAuthUrl(String fileId);
|
||||||
|
|
||||||
|
}
|
|
@ -25,7 +25,6 @@
|
||||||
package cn.stylefeng.roses.kernel.file.modular.service.impl;
|
package cn.stylefeng.roses.kernel.file.modular.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.codec.Base64;
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
@ -37,7 +36,6 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||||
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
|
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
|
||||||
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
|
import cn.stylefeng.roses.kernel.file.api.FileOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.file.api.constants.FileConstants;
|
|
||||||
import cn.stylefeng.roses.kernel.file.api.enums.FileLocationEnum;
|
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.enums.FileStatusEnum;
|
||||||
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
import cn.stylefeng.roses.kernel.file.api.exception.FileException;
|
||||||
|
@ -50,11 +48,12 @@ import cn.stylefeng.roses.kernel.file.api.util.DownloadUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.api.util.PdfFileTypeUtil;
|
import cn.stylefeng.roses.kernel.file.api.util.PdfFileTypeUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.api.util.PicFileTypeUtil;
|
import cn.stylefeng.roses.kernel.file.api.util.PicFileTypeUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileInfo;
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileStorage;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.factory.FileInfoFactory;
|
import cn.stylefeng.roses.kernel.file.modular.factory.FileInfoFactory;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.mapper.SysFileInfoMapper;
|
import cn.stylefeng.roses.kernel.file.modular.mapper.SysFileInfoMapper;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService;
|
import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService;
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.service.SysFileStorageService;
|
||||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||||
import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
|
@ -93,6 +92,9 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
@Resource
|
@Resource
|
||||||
private FileOperatorApi fileOperatorApi;
|
private FileOperatorApi fileOperatorApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysFileStorageService sysFileStorageService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SysFileInfoResponse getFileInfoResult(Long fileId) {
|
public SysFileInfoResponse getFileInfoResult(Long fileId) {
|
||||||
|
|
||||||
|
@ -104,7 +106,13 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
// 获取文件字节码
|
// 获取文件字节码
|
||||||
byte[] fileBytes;
|
byte[] fileBytes;
|
||||||
try {
|
try {
|
||||||
|
// 如果是存储在数据库,从数据库中获取,其他的方式走FileOperatorApi
|
||||||
|
if (FileLocationEnum.DB.getCode().equals(sysFileInfo.getFileLocation())) {
|
||||||
|
SysFileStorage storage = sysFileStorageService.getById(fileId);
|
||||||
|
fileBytes = storage.getFileBytes();
|
||||||
|
} else {
|
||||||
fileBytes = fileOperatorApi.getFileBytes(FileConfigExpander.getDefaultBucket(), sysFileInfo.getFileObjectName());
|
fileBytes = fileOperatorApi.getFileBytes(FileConfigExpander.getDefaultBucket(), sysFileInfo.getFileObjectName());
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("获取文件流异常,具体信息为:{}", e.getMessage());
|
log.error("获取文件流异常,具体信息为:{}", e.getMessage());
|
||||||
throw new FileException(FileExceptionEnum.FILE_STREAM_ERROR, e.getMessage());
|
throw new FileException(FileExceptionEnum.FILE_STREAM_ERROR, e.getMessage());
|
||||||
|
@ -212,9 +220,14 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
|
|
||||||
// 删除具体文件
|
// 删除具体文件
|
||||||
for (SysFileInfo fileInfo : fileInfos) {
|
for (SysFileInfo fileInfo : fileInfos) {
|
||||||
|
//如果文件是在数据库存储,则特殊处理
|
||||||
|
if (fileInfo.getFileLocation().equals(FileLocationEnum.DB.getCode())) {
|
||||||
|
this.sysFileStorageService.removeById(fileInfo.getFileId());
|
||||||
|
} else {
|
||||||
this.fileOperatorApi.deleteFile(fileInfo.getFileBucket(), fileInfo.getFileObjectName());
|
this.fileOperatorApi.deleteFile(fileInfo.getFileBucket(), fileInfo.getFileObjectName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<SysFileInfoListResponse> fileInfoListPage(SysFileInfoRequest sysFileInfoRequest) {
|
public PageResult<SysFileInfoListResponse> fileInfoListPage(SysFileInfoRequest sysFileInfoRequest) {
|
||||||
|
@ -296,12 +309,6 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
@Override
|
@Override
|
||||||
public void preview(SysFileInfoRequest sysFileInfoRequest, HttpServletResponse response) {
|
public void preview(SysFileInfoRequest sysFileInfoRequest, HttpServletResponse response) {
|
||||||
|
|
||||||
// 如果是默认头像
|
|
||||||
if (FileConstants.DEFAULT_AVATAR_FILE_ID.equals(sysFileInfoRequest.getFileId())) {
|
|
||||||
DownloadUtil.renderPreviewFile(response, Base64.decode(FileConfigExpander.getDefaultAvatarBase64()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据文件id获取文件信息结果集
|
// 根据文件id获取文件信息结果集
|
||||||
SysFileInfoResponse sysFileInfoResponse = this.getFileInfoResult(sysFileInfoRequest.getFileId());
|
SysFileInfoResponse sysFileInfoResponse = this.getFileInfoResult(sysFileInfoRequest.getFileId());
|
||||||
|
|
||||||
|
@ -358,13 +365,6 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
@Override
|
@Override
|
||||||
public void previewByBucketAndObjName(SysFileInfoRequest sysFileInfoRequest, HttpServletResponse response) {
|
public void previewByBucketAndObjName(SysFileInfoRequest sysFileInfoRequest, HttpServletResponse response) {
|
||||||
|
|
||||||
// 如果是默认头像
|
|
||||||
if (FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME.equals(sysFileInfoRequest.getFileObjectName())
|
|
||||||
|| FileConstants.DEFAULT_AVATAR_FILE_FINAL_NAME.equals(sysFileInfoRequest.getFileObjectName())) {
|
|
||||||
DownloadUtil.renderPreviewFile(response, Base64.decode(FileConfigExpander.getDefaultAvatarBase64()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断文件是否需要鉴权,需要鉴权的需要带token访问
|
// 判断文件是否需要鉴权,需要鉴权的需要带token访问
|
||||||
LambdaQueryWrapper<SysFileInfo> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysFileInfo> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(SysFileInfo::getFileObjectName, sysFileInfoRequest.getFileObjectName());
|
wrapper.eq(SysFileInfo::getFileObjectName, sysFileInfoRequest.getFileObjectName());
|
||||||
|
@ -439,11 +439,9 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
sysFileInfoRequest.setFileId(fileId);
|
sysFileInfoRequest.setFileId(fileId);
|
||||||
SysFileInfo sysFileInfo = querySysFileInfo(sysFileInfoRequest);
|
SysFileInfo sysFileInfo = querySysFileInfo(sysFileInfoRequest);
|
||||||
|
|
||||||
// 如果是本地存储,则返回本地存储方式的文件预览
|
// 如果是数据库存储,则返回previewUrl
|
||||||
if (sysFileInfo.getFileLocation().equals(FileLocationEnum.LOCAL.getCode())) {
|
if (sysFileInfo.getFileLocation().equals(FileLocationEnum.DB.getCode())) {
|
||||||
// 获取context-path
|
return this.sysFileStorageService.getFileAuthUrl(String.valueOf(fileId));
|
||||||
String contextPath = HttpServletUtil.getRequest().getContextPath();
|
|
||||||
return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PRIVATE_PREVIEW_URL + "?fileId=" + fileId + "&token=" + token;
|
|
||||||
} else {
|
} else {
|
||||||
// 返回第三方存储文件url
|
// 返回第三方存储文件url
|
||||||
return fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), FileConfigExpander.getDefaultFileTimeoutSeconds());
|
return fileOperatorApi.getFileAuthUrl(sysFileInfo.getFileBucket(), sysFileInfo.getFileObjectName(), FileConfigExpander.getDefaultFileTimeoutSeconds());
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package cn.stylefeng.roses.kernel.file.modular.service.impl;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||||
|
import cn.stylefeng.roses.kernel.file.api.constants.FileConstants;
|
||||||
|
import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander;
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.entity.SysFileStorage;
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.mapper.SysFileStorageMapper;
|
||||||
|
import cn.stylefeng.roses.kernel.file.modular.service.SysFileStorageService;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件存储信息业务实现层
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2022/01/08 15:53
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class SysFileStorageServiceImpl extends ServiceImpl<SysFileStorageMapper, SysFileStorage> implements SysFileStorageService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveFile(Long fileId, byte[] bytes) {
|
||||||
|
SysFileStorage sysFileStorage = new SysFileStorage();
|
||||||
|
sysFileStorage.setFileId(fileId);
|
||||||
|
sysFileStorage.setFileBytes(bytes);
|
||||||
|
this.save(sysFileStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileAuthUrl(String fileId) {
|
||||||
|
// 获取登录用户的token
|
||||||
|
String token = LoginContext.me().getToken();
|
||||||
|
// 获取context-path
|
||||||
|
String contextPath = HttpServletUtil.getRequest().getContextPath();
|
||||||
|
return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PRIVATE_PREVIEW_URL + "?fileId=" + fileId + "&token=" + token;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileUnAuthUrl(String fileId) {
|
||||||
|
// 获取context-path
|
||||||
|
String contextPath = HttpServletUtil.getRequest().getContextPath();
|
||||||
|
return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PUBLIC_PREVIEW_URL + "?fileId=" + fileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue