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());
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认的系统头像,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 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染被预览的文件到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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// 提示用户信息不全
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染被预览的文件到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