package cn.stylefeng.guns.sys.core.util;
|
|
import cn.hutool.core.io.FileUtil;
|
import cn.stylefeng.guns.base.consts.ConstantsContext;
|
import cn.stylefeng.guns.sys.core.listener.ConfigListener;
|
import cn.stylefeng.guns.sys.modular.system.model.UeditorFileResult;
|
import cn.stylefeng.roses.core.util.ToolUtil;
|
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
|
import static cn.stylefeng.guns.sys.core.exception.enums.BizExceptionEnum.*;
|
|
/**
|
* 百度富文本的工具类
|
*
|
* @author fengshuonan
|
* @Date 2019/8/26 15:27
|
*/
|
@Slf4j
|
public class UeditorUtil {
|
|
/**
|
* ue上传文件逻辑
|
*
|
* @author fengshuonan
|
* @Date 2019-08-27 12:54
|
*/
|
public static UeditorFileResult uploadFile(MultipartFile upfile, FileType fileType) {
|
if (upfile.isEmpty()) {
|
throw new ServiceException(UE_FILE_NULL_ERROR);
|
}
|
|
// 获取文件名,后缀名
|
String oldFileName = upfile.getOriginalFilename();
|
String suffixName = ToolUtil.getFileSuffix(oldFileName);
|
|
// 重新命名图片
|
String newFileName = IdWorker.getIdStr() + "." + suffixName;
|
|
UeditorFileResult ueditorFileResult = new UeditorFileResult();
|
String path = null;
|
|
// 如果是上传图片
|
if (fileType.equals(FileType.IMG)) {
|
|
ueditorFileResult.setUrl(UeditorUtil.getImageRelativeUrl(newFileName));
|
ueditorFileResult.setTitle(newFileName);
|
ueditorFileResult.setOriginal(newFileName);
|
|
//文件用原始文件
|
path = ConstantsContext.getFileUploadPath() + newFileName;
|
|
|
} else if (fileType.equals(FileType.FILE)) {
|
|
// 如果是上传文件
|
ueditorFileResult.setUrl(UeditorUtil.getFileRelativeUrl(newFileName) + "/" + oldFileName);
|
ueditorFileResult.setTitle(oldFileName);
|
ueditorFileResult.setOriginal(oldFileName);
|
|
//文件用原始文件
|
path = ConstantsContext.getFileUploadPath() + newFileName;
|
|
} else {
|
|
// 如果是上传视频
|
ueditorFileResult.setUrl(UeditorUtil.getVideoRelativeUrl(newFileName));
|
ueditorFileResult.setTitle(newFileName);
|
ueditorFileResult.setOriginal(newFileName);
|
|
//文件用原始文件
|
path = ConstantsContext.getFileUploadPath() + newFileName;
|
|
}
|
|
try {
|
|
File dest = new File(path);
|
if (!dest.getParentFile().exists()) {
|
dest.getParentFile().mkdirs();
|
}
|
|
upfile.transferTo(dest);
|
return ueditorFileResult;
|
} catch (IOException e) {
|
log.error("保存ue的上传文件出错!", e);
|
throw new ServiceException(UE_FILE_SAVE_ERROR);
|
}
|
}
|
|
/**
|
* 读取文件
|
*
|
* @author fengshuonan
|
* @Date 2019-08-27 13:02
|
*/
|
public static void readFile(String fileName, HttpServletResponse response, FileType fileType, String orginalName) {
|
|
if (ToolUtil.isEmpty(fileName)) {
|
throw new ServiceException(UE_FILE_NULL_ERROR);
|
}
|
|
//获取文件路径
|
String path = ConstantsContext.getFileUploadPath() + fileName;
|
File file = new File(path);
|
|
//文件不存在或者不可读
|
if (!file.exists() || !file.canRead()) {
|
throw new ServiceException(UE_FILE_NULL_ERROR);
|
}
|
|
//读取文件
|
byte[] bytes = null;
|
|
//设置响应的类型
|
if (fileType.equals(FileType.IMG)) {
|
|
response.setContentType("image/png");
|
bytes = FileUtil.readBytes(file);
|
|
} else if (fileType.equals(FileType.FILE)) {
|
|
response.setContentType("multipart/form-data;charset=utf-8");
|
|
//判断文件是否已经被重命名
|
String newFilePath = ConstantsContext.getFileUploadPath() + orginalName;
|
File newFile = new File(newFilePath);
|
if (!newFile.exists()) {
|
newFile = UeditorUtil.reName(file, orginalName);
|
}
|
bytes = FileUtil.readBytes(newFile);
|
|
} else {
|
|
response.setContentType("video/x-sgi-movie");
|
bytes = FileUtil.readBytes(file);
|
|
}
|
|
try {
|
OutputStream stream = response.getOutputStream();
|
stream.write(bytes);
|
} catch (IOException e) {
|
log.error("读取文件错误!", e);
|
throw new ServiceException(UE_FILE_READ_ERROR);
|
}
|
}
|
|
/**
|
* 获取图片相对路径
|
*
|
* @author fengshuonan
|
* @Date 2019/8/26 15:21
|
*/
|
private static String getImageRelativeUrl(String imageName) {
|
String contextPath = ConfigListener.getConf().get("contextPath");
|
return contextPath + "/ueditor/images/" + imageName;
|
}
|
|
/**
|
* 获取文件相对路径
|
*
|
* @author fengshuonan
|
* @Date 2019/8/26 15:22
|
*/
|
private static String getFileRelativeUrl(String imageName) {
|
String contextPath = ConfigListener.getConf().get("contextPath");
|
return contextPath + "/ueditor/file/" + imageName;
|
}
|
|
/**
|
* 获取视频相对路径
|
*
|
* @author fengshuonan
|
* @Date 2019/8/26 15:22
|
*/
|
private static String getVideoRelativeUrl(String imageName) {
|
String contextPath = ConfigListener.getConf().get("contextPath");
|
return contextPath + "/ueditor/video/" + imageName;
|
}
|
|
/**
|
* 文件重命名
|
*
|
* @author fengshuonan
|
* @Date 2019/8/26 15:23
|
*/
|
private static File reName(File file, String newName) {
|
if (file.exists()) {
|
|
//创建新名字的抽象文件
|
File newfile = new File(file.getParent() + File.separator + newName);
|
|
if (file.renameTo(newfile)) {
|
log.info("重命名成功!");
|
return newfile;
|
} else {
|
log.info("重命名失败!新文件名已存在!");
|
return file;
|
}
|
} else {
|
log.info("重命名文件不存在!");
|
return file;
|
}
|
}
|
|
/**
|
* 文件类型
|
*
|
* @author fengshuonan
|
* @Date 2019-08-27 12:52
|
*/
|
public enum FileType {
|
|
/**
|
* 图片类型
|
*/
|
IMG,
|
|
/**
|
* 文件类型
|
*/
|
FILE,
|
|
/**
|
* 视频类型
|
*/
|
VIDEO
|
}
|
|
}
|