mirror of https://gitee.com/stylefeng/roses
【file】增加默认渲染头像的逻辑
parent
e5b506191c
commit
da229ace1f
File diff suppressed because one or more lines are too long
|
@ -72,4 +72,14 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import cn.stylefeng.roses.kernel.file.exception.FileException;
|
||||||
import cn.stylefeng.roses.kernel.file.exception.enums.FileExceptionEnum;
|
import cn.stylefeng.roses.kernel.file.exception.enums.FileExceptionEnum;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -73,4 +74,26 @@ public class DownloadUtil {
|
||||||
download(fileName, fileBytes, response);
|
download(fileName, fileBytes, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染被预览的文件到servlet的response流中
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2020/11/29 17:13
|
||||||
|
*/
|
||||||
|
public static void renderPreviewFile(HttpServletResponse response, byte[] fileBytes) {
|
||||||
|
try {
|
||||||
|
// 设置contentType
|
||||||
|
response.setContentType("image/png");
|
||||||
|
|
||||||
|
// 获取outputStream
|
||||||
|
ServletOutputStream outputStream = response.getOutputStream();
|
||||||
|
|
||||||
|
// 输出字节流
|
||||||
|
IoUtil.write(outputStream, true, fileBytes);
|
||||||
|
} catch (IOException e) {
|
||||||
|
String userTip = StrUtil.format(FileExceptionEnum.WRITE_BYTES_ERROR.getUserTip(), e.getMessage());
|
||||||
|
throw new FileException(FileExceptionEnum.WRITE_BYTES_ERROR, userTip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package cn.stylefeng.roses.kernel.file.modular.controller;
|
package cn.stylefeng.roses.kernel.file.modular.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.codec.Base64;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.file.exception.FileException;
|
import cn.stylefeng.roses.kernel.file.exception.FileException;
|
||||||
import cn.stylefeng.roses.kernel.file.exception.enums.FileExceptionEnum;
|
import cn.stylefeng.roses.kernel.file.exception.enums.FileExceptionEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.file.expander.FileConfigExpander;
|
||||||
import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService;
|
import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService;
|
||||||
import cn.stylefeng.roses.kernel.file.pojo.request.SysFileInfoRequest;
|
import cn.stylefeng.roses.kernel.file.pojo.request.SysFileInfoRequest;
|
||||||
|
import cn.stylefeng.roses.kernel.file.util.DownloadUtil;
|
||||||
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
|
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
|
||||||
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
|
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
|
||||||
import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
|
import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
|
||||||
|
@ -21,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import static cn.stylefeng.roses.kernel.file.constants.FileConstants.DEFAULT_AVATAR_FILE_OBJ_NAME;
|
||||||
import static cn.stylefeng.roses.kernel.file.constants.FileConstants.FILE_PREVIEW_URL;
|
import static cn.stylefeng.roses.kernel.file.constants.FileConstants.FILE_PREVIEW_URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -88,14 +92,22 @@ public class SysFileInfoController {
|
||||||
throw new FileException(FileExceptionEnum.PREVIEW_EMPTY_ERROR, userTip);
|
throw new FileException(FileExceptionEnum.PREVIEW_EMPTY_ERROR, userTip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 文件是-1则返回系统默认头像
|
||||||
|
if (DEFAULT_AVATAR_FILE_OBJ_NAME.equals(sysFileInfoRequest.getFileObjectName())) {
|
||||||
|
DownloadUtil.renderPreviewFile(response, Base64.decode(FileConfigExpander.getDefaultAvatarBase64()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 文件id不为空,则根据文件id预览
|
// 文件id不为空,则根据文件id预览
|
||||||
if (ObjectUtil.isNotEmpty(sysFileInfoRequest.getFileId())) {
|
if (ObjectUtil.isNotEmpty(sysFileInfoRequest.getFileId())) {
|
||||||
sysFileInfoService.previewByFileId(sysFileInfoRequest, response);
|
sysFileInfoService.previewByFileId(sysFileInfoRequest, response);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 文件bucketName和objectName不为空,则根据bucket预览
|
// 文件bucketName和objectName不为空,则根据bucket预览
|
||||||
if (ObjectUtil.isAllNotEmpty(sysFileInfoRequest.getFileBucket(), sysFileInfoRequest.getFileObjectName())) {
|
if (ObjectUtil.isAllNotEmpty(sysFileInfoRequest.getFileBucket(), sysFileInfoRequest.getFileObjectName())) {
|
||||||
sysFileInfoService.previewByBucketAndObjName(sysFileInfoRequest, response);
|
sysFileInfoService.previewByBucketAndObjName(sysFileInfoRequest, response);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提示用户信息不全
|
// 提示用户信息不全
|
||||||
|
|
|
@ -2,7 +2,6 @@ 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.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.io.IoUtil;
|
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
@ -28,13 +27,11 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.ServletOutputStream;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -137,7 +134,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
|
|
||||||
// 如果是图片类型,则直接输出
|
// 如果是图片类型,则直接输出
|
||||||
if (PicFileTypeUtil.getFileImgTypeFlag(fileSuffix)) {
|
if (PicFileTypeUtil.getFileImgTypeFlag(fileSuffix)) {
|
||||||
renderPreviewFile(response, fileBytes);
|
DownloadUtil.renderPreviewFile(response, fileBytes);
|
||||||
} else {
|
} else {
|
||||||
// 不支持别的文件预览
|
// 不支持别的文件预览
|
||||||
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
|
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
|
||||||
|
@ -158,7 +155,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
|
|
||||||
// 如果是图片类型,则直接输出
|
// 如果是图片类型,则直接输出
|
||||||
if (PicFileTypeUtil.getFileImgTypeFlag(sysFileInfoRequest.getFileObjectName())) {
|
if (PicFileTypeUtil.getFileImgTypeFlag(sysFileInfoRequest.getFileObjectName())) {
|
||||||
renderPreviewFile(response, fileBytes);
|
DownloadUtil.renderPreviewFile(response, fileBytes);
|
||||||
} else {
|
} else {
|
||||||
// 不支持别的文件预览
|
// 不支持别的文件预览
|
||||||
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
|
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
|
||||||
|
@ -278,26 +275,4 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
|
||||||
return queryWrapper;
|
return queryWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 渲染被预览的文件到servlet的response流中
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2020/11/29 17:13
|
|
||||||
*/
|
|
||||||
private void renderPreviewFile(HttpServletResponse response, byte[] fileBytes) {
|
|
||||||
try {
|
|
||||||
// 设置contentType
|
|
||||||
response.setContentType(MediaType.IMAGE_PNG_VALUE);
|
|
||||||
|
|
||||||
// 获取outputStream
|
|
||||||
ServletOutputStream outputStream = response.getOutputStream();
|
|
||||||
|
|
||||||
// 输出字节流
|
|
||||||
IoUtil.write(outputStream, true, fileBytes);
|
|
||||||
} catch (IOException e) {
|
|
||||||
String userTip = StrUtil.format(FileExceptionEnum.WRITE_BYTES_ERROR.getUserTip(), e.getMessage());
|
|
||||||
throw new FileException(FileExceptionEnum.WRITE_BYTES_ERROR, userTip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue