【file】增加默认渲染头像的逻辑

pull/3/head
fengshuonan 2020-12-29 20:22:44 +08:00
parent e5b506191c
commit da229ace1f
5 changed files with 57 additions and 27 deletions

View File

@ -72,4 +72,14 @@ public class FileConfigExpander {
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);
}
}

View File

@ -9,6 +9,7 @@ import cn.stylefeng.roses.kernel.file.exception.FileException;
import cn.stylefeng.roses.kernel.file.exception.enums.FileExceptionEnum;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
@ -73,4 +74,26 @@ public class DownloadUtil {
download(fileName, fileBytes, response);
}
/**
* servletresponse
*
* @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);
}
}
}

View File

@ -1,11 +1,14 @@
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.StrUtil;
import cn.stylefeng.roses.kernel.file.exception.FileException;
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.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.GetResource;
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.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;
/**
@ -88,14 +92,22 @@ public class SysFileInfoController {
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预览
if (ObjectUtil.isNotEmpty(sysFileInfoRequest.getFileId())) {
sysFileInfoService.previewByFileId(sysFileInfoRequest, response);
return;
}
// 文件bucketName和objectName不为空则根据bucket预览
if (ObjectUtil.isAllNotEmpty(sysFileInfoRequest.getFileBucket(), sysFileInfoRequest.getFileObjectName())) {
sysFileInfoService.previewByBucketAndObjName(sysFileInfoRequest, response);
return;
}
// 提示用户信息不全

View File

@ -2,7 +2,6 @@ package cn.stylefeng.roses.kernel.file.modular.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
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.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
@ -137,7 +134,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
// 如果是图片类型,则直接输出
if (PicFileTypeUtil.getFileImgTypeFlag(fileSuffix)) {
renderPreviewFile(response, fileBytes);
DownloadUtil.renderPreviewFile(response, fileBytes);
} else {
// 不支持别的文件预览
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
@ -158,7 +155,7 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
// 如果是图片类型,则直接输出
if (PicFileTypeUtil.getFileImgTypeFlag(sysFileInfoRequest.getFileObjectName())) {
renderPreviewFile(response, fileBytes);
DownloadUtil.renderPreviewFile(response, fileBytes);
} else {
// 不支持别的文件预览
throw new FileException(FileExceptionEnum.PREVIEW_ERROR_NOT_SUPPORT);
@ -278,26 +275,4 @@ public class SysFileInfoServiceImpl extends ServiceImpl<SysFileInfoMapper, SysFi
return queryWrapper;
}
/**
* servletresponse
*
* @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);
}
}
}