import lombok.extern.slf4j.Slf4j; import org.apache.tika.Tika; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author: robert * @date: 2021-12-21 10:29 * @description: */ @Slf4j public class MimeTypeUtils { private static MimeTypeUtils instance; private MimeTypeUtils(){} public static synchronized MimeTypeUtils getInstance(){ if(instance==null){ instance=new MimeTypeUtils(); } return instance; } /** * Apache的tika * pom.xml: * <dependency> * <groupId>org.apache.tika</groupId> * <artifactId>tika-parsers</artifactId> * <version>1.17</version> * </dependency> * * */ private final Tika tika = new Tika(); /** * en:Allow mime type all (Map) */ private final HashMap<String, String> allowMimeTypeAll = new HashMap<String, String>() { { put("application/pdf","pdf"); put("image/png","png"); put("image/x-png","png"); put("image/jpeg","jpeg;jpg"); put("image/jpg","jpg"); put("application/zip","zip"); put("application/x-rar-compressed","rar"); put("application/vnd.ms-word","doc"); put("application/msword","doc"); put("application/vnd.openxmlformats-officedocument.wordprocessingml.document","docx"); put("application/vnd.ms-excel","xls"); put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xlsx"); put("application/vnd.ms-powerpoint","ppt;pps"); put("application/vnd.openxmlformats-officedocument.presentationml.presentation","pptx"); put("image/tiff","tiff"); put("video/mp4","mp4"); } }; /** * @author: robert * @date: 2021-12-21 10:29 * @param prjInfoFile * @return * @throws IOException */ public String MimeFileTypeVerification(MultipartFile prjInfoFile) throws IOException { byte[] byteInfoFile = prjInfoFile.getBytes(); String fileName = prjInfoFile.getOriginalFilename().toLowerCase(); if (byteInfoFile.length > 0 && CommonUtils.notEmpty(fileName)) { String mimeType = tika.detect(byteInfoFile); log.info("MimeTypeUtils.MimeFileTypeVerification:filename={} and mimeType={}", fileName, mimeType); String[] mimeTypeArray = null; String mimeTypeValue = allowMimeTypeAll.get(mimeType); if(allowMimeTypeAll.containsKey(mimeType)){ mimeTypeArray = mimeTypeValue.contains(";") ? mimeTypeValue.split(";") : null; } if(CommonUtils.notEmpty(mimeTypeArray)){ for(String mimeTypeString : mimeTypeArray){ if (fileName.endsWith("." + mimeTypeString)) { return null;//正確,校驗通過,返回null } } }else{ if (fileName.endsWith("." + mimeTypeValue)) { return null;//正確,校驗通過,返回null } } } log.info("MimeTypeUtils.MimeFileTypeVerification.error=Unacceptable file type."); return "Unacceptable file type."; } public static void main(String[] args) { Map<String,String> allowMimeTypeAll = MimeTypeUtils.getInstance().allowMimeTypeAll; System.out.println(allowMimeTypeAll); } }
/** * Apache的tika * pom.xml: * <dependency> * <groupId>org.apache.tika</groupId> * <artifactId>tika-parsers</artifactId> * <version>1.17</version> * </dependency> * * */
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers</artifactId> <version>1.17</version> </dependency>