我们发布啦

This commit is contained in:
张乐
2020-08-13 16:12:57 +08:00
parent a3e1c38d27
commit c0cec49f41
1885 changed files with 376936 additions and 2 deletions

View File

@@ -0,0 +1,314 @@
package com.utils;
import cn.hutool.core.util.RandomUtil;
import com.constants.Constants;
import com.exception.CrmebException;
import com.zbkj.crmeb.upload.vo.FileResultVo;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* 上传工具类
* @author Mr.Zhang
* @since 2020-05-08
*/
public class UploadUtil {
private static UploadUtil uploadUtil = new UploadUtil();
//服务器存储地址
// private static String rootPath = "/www/wwwroot/upload";
private static String rootPath = "";
//类型
// private static String imagePath = "/image";
private static String type = "/image";
//模块
// private static String modelPath = "/store";
private static String modelPath = "/public";
//扩展名
private static String extStr = "png,jpg";
//文件大小上限
private static int size = 2;
//是否压缩图片
private static boolean isCompress = false;
public static String getRootPath() {
return rootPath;
}
public static void setRootPath(String rootPath) {
UploadUtil.rootPath = (rootPath + "/").replace(" ", "").replace("//", "/");
}
public static String getType() {
return type;
}
public static void setType(String type) {
UploadUtil.type = type + "/";
}
public static String getModelPath() {
return modelPath;
}
public static void setModelPath(String modelPath) {
UploadUtil.modelPath = modelPath + "/";
}
public static String getExtStr() {
return extStr;
}
public static void setExtStr(String extStr) {
UploadUtil.extStr = extStr;
}
public static int getSize() {
return size;
}
public static void setSize(int size) {
UploadUtil.size = size;
}
public static boolean isIsCompress() {
return isCompress;
}
public static void setIsCompress(boolean isCompress) {
UploadUtil.isCompress = isCompress;
}
/**
* 获取单例
* @author Mr.Zhang
* @since 2020-05-08
*/
public static UploadUtil getInstance() {
if (uploadUtil == null) {
uploadUtil = new UploadUtil();
}
return uploadUtil;
}
/**
* 根据文件的绝对路径创建一个文件对象.
* @return 返回创建的这个文件对象
* @author Mr.Zhang
* @since 2020-05-08
*/
public static File createFile(String filePath) throws IOException {
// 获取文件的完整目录
String fileDir = FilenameUtils.getFullPath(filePath);
// 判断目录是否存在,不存在就创建一个目录
File file = new File(fileDir);
if (!file.isDirectory()) {
//创建失败返回null
if (!file.mkdirs()) {
throw new CrmebException("文件目录创建失败...");
}
}
// 判断这个文件是否存在,不存在就创建
file = new File(filePath);
if (!file.exists()) {
if (!file.createNewFile()) {
throw new CrmebException("目标文件创建失败...");
}
}
return file;
}
/**
* 判断文件扩展名是否合法
* @param extName 文件的后缀名
* @author Mr.Zhang
* @since 2020-05-08
*/
private static void isContains(String extName) {
if (StringUtils.isNotEmpty(getExtStr())) {
// 切割文件扩展名
List<String> extensionList = CrmebUtil.stringToArrayStr(getExtStr());
if (extensionList.size() > 0) {
//判断
if (!extensionList.contains(extName)) {
throw new CrmebException("上传文件的类型只能是:" + getExtStr());
}
} else {
throw new CrmebException("上传文件的类型只能是:" + getExtStr());
}
}
}
// /**
// * 图片压缩
// * @param serverPath 图片的绝对路径
// * @param childFile 子文件夹
// * @param extName 文件的后缀
// * @author Mr.Zhang
// * @since 2020-05-08
// */
// private static String thumbnails(String serverPath, String childFile, String extName) throws IOException {
// // 压缩后的相对路径文件名
// String toFilePath = getDestPath(extName);
//
// // scale图片缩放比例
// // outputQuality图片压缩比例
// // toFile图片位置
// // outputFormat文件输出后缀名
// // Thumbnails 如果用来压缩 png 格式的文件,会越压越大,
// // 得把png格式的图片转换为jpg格式
// if ("png".equalsIgnoreCase(extName)) {
// // 由于outputFormat会自动在路径后加上后缀名所以移除以前的后缀名
// String removeExtensionFilePath = FilenameUtils.removeExtension(toFilePath);
// Thumbnails.of(serverPath).scale(1f)
// .outputQuality(0.5f)
// .outputFormat("jpg")
// .toFile(getServerPath(removeExtensionFilePath));
// toFilePath = removeExtensionFilePath + ".jpg";
// } else {
// Thumbnails.of(serverPath).scale(1f).outputQuality(0.5f)
// .toFile(getServerPath(toFilePath));
// }
//
// // 删除被压缩的文件
// FileUtils.forceDelete(new File(serverPath));
//
// return toFilePath;
// }
/**
* 生成文件文件名
* @param fileName 文件名
* @author Mr.Zhang
* @since 2020-05-08
*/
public static String getDestPath(String fileName) {
//规则: 子目录/年/月/日.后缀名
return getServerPath() + fileName;
}
public static String fileName(String extName){
return CrmebUtil.getUuid() + RandomUtil.randomString(10) + "." + extName;
}
/**
* 生成文件在的实际的路径
* @author Mr.Zhang
* @since 2020-05-08
*/
private static String getServerPath() {
// 文件分隔符转化为当前系统的格式
return FilenameUtils.separatorsToSystem( getRootPath() + getWebPath());
}
/**
* web目录可访问的路径
* @author Mr.Zhang
* @since 2020-05-08
*/
private static String getWebPath() {
// 文件分隔符转化为当前系统的格式
return getType() + getModelPath() + DateUtil.nowDate(Constants.DATE_FORMAT_DATE).replace("-", "/") + "/";
}
/**
* 检测文件大小上限
* @author Mr.Zhang
* @since 2020-05-08
*/
private static void checkSize(Long size) {
// 文件分隔符转化为当前系统的格式
float fileSize = (float)size / 1024 / 1024;
String fs = String.format("%.2f", fileSize);
if( fileSize > getSize()){
throw new CrmebException("最大允许上传" + getSize() + " MB的文件, 当前文件大小为 " + fs + " MB");
}
}
/**
* 上传文件
* @param multipartFile 上传的文件对象,必传
* @author Mr.Zhang
* @since 2020-05-08
*/
private static FileResultVo saveFile(MultipartFile multipartFile) throws IOException {
if (null == multipartFile || multipartFile.isEmpty()) {
throw new CrmebException("上传的文件对象不存在...");
}
// 文件名
String fileName = multipartFile.getOriginalFilename();
// 文件后缀名
String extName = FilenameUtils.getExtension(fileName);
if (StringUtils.isEmpty(extName)) {
throw new RuntimeException("文件类型未定义不能上传...");
}
//文件大小验证
checkSize(multipartFile.getSize());
// 判断文件的后缀名是否符合规则
isContains(extName);
//文件名
String newFileName = fileName(extName);
// 创建目标文件的名称规则请看destPath方法
String destPath = getDestPath(newFileName);
// 创建文件
File file = createFile(destPath);
// 保存文件
multipartFile.transferTo(file);
// 拼装返回的数据
FileResultVo result = new FileResultVo();
//如果是图片,就进行图片处理
if (BooleanUtils.isTrue(isIsCompress())) {
// // 图片处理
// String toFilePath = thumbnails(serverPath, childFile, extName);
// // 得到处理后的图片文件对象
// File file = new File(getServerPath());
// // 压缩后的文件后缀名
// String extExtName = FilenameUtils.getExtension(toFilePath);
// // 源文件=源文件名.压缩后的后缀名
// String extFileName = FilenameUtils.getBaseName(fileName) + "." + FilenameUtils.getExtension(toFilePath);
// result.setFileSize(file.length());
// result.setServerPath(toFilePath);
// result.setFileName(extFileName);
// result.setExtName(extExtName);
} else {
result.setFileSize(multipartFile.getSize());
result.setFileName(fileName);
result.setExtName(extName);
result.setServerPath(destPath);
result.setUrl(getWebPath() + newFileName);
result.setType(multipartFile.getContentType());
}
return result;
}
/**
* 上传
* @param multipartFile 上传的文件对象,必传
* @since 2020-05-08
* @author Mr.Zhang
*/
public static FileResultVo file(MultipartFile multipartFile) throws IOException {
return saveFile(multipartFile);
}
}