java mime file type utils

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;
    }

    /**
     * Apachetika
     * pom.xml:
     * <dependency>
     *   <groupId>org.apache.tika</groupId>
     *   <artifactId>tika-parsers</artifactId>
     *   <version>1.17</version>
     * </dependency>
     *
     * */
    private final Tika tika = new Tika();

    /**
     * enAllow 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);
    }

}

 

/**
 * Apachetika
 * 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>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章