package com.monkeylessey.file.utils; import com.monkeylessey.constant.HttpStatusConstants; import com.monkeylessey.enums.FileTypeEnum; import com.monkeylessey.enums.general.FileUploadTypeEnum; import com.monkeylessey.exception.FileFormatNotSupport; import com.monkeylessey.file.domain.entity.FileInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * @author 29443 * @version 1.0 * @date 2022/4/25 */ public class FileUtil { /** * 获取文件后缀 * * @param fileName * @return */ public static String getSuffix(String fileName) { String suffix = fileName.substring(fileName.lastIndexOf('.') + 1); return suffix; } /** * 获取该文件上传到oss哪个目录 * * @param suffix 文件后缀 * @return */ public static String getFileType(String suffix) { String fileType = ""; for (FileTypeEnum type : FileTypeEnum.values()) { if (type.getSuffixs().contains(suffix)) { fileType = type.getType(); return fileType; } } if (StringUtils.isBlank(fileType)) { throw new FileFormatNotSupport("文件格式" + suffix + "不支持", HttpStatusConstants.ERROR); } return fileType; } /** * 获取文件的信息,调用此方法默认普通上传 * * @param file * @return */ public static FileInfo getFileInfo(MultipartFile file) { String originalFilename = file.getOriginalFilename(); String random = generateFileKey(); String suffix = getSuffix(originalFilename); String fileType = getFileType(suffix); String fileKey = String.format("%s/%s.%s", fileType, random, suffix); FileInfo fileInfo = new FileInfo(); fileInfo.setFileKey(fileKey); fileInfo.setOriginalFilename(originalFilename); fileInfo.setContentType(file.getContentType()); fileInfo.setSize(file.getSize()); fileInfo.setUploadType(FileUploadTypeEnum.COMMON); return fileInfo; } /** * 获取文件的信息,传入上传类型 * * @param file * @return */ public static FileInfo getFileInfoWithUploadType(MultipartFile file, FileUploadTypeEnum uploadType) { FileInfo fileInfo = getFileInfo(file); fileInfo.setUploadType(uploadType); return fileInfo; } /** * 获取fileKey * * @return */ public static String generateFileKey() { SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); String no = format.format(new Date()); Random random = new Random(); for (int i = 0; i < 8; i++) { no += random.nextInt(10); } return no; } }