最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java文件類型校驗(yàn)之Apache Tika詳解

 更新時(shí)間:2026年03月30日 09:47:24   作者:HelloWorddddddd  
本文介紹了使用Apache Tika庫(kù)來判斷文件類型的方法,Tika可判斷多種文件類型,包括doc、ppt、xls等,通過引入Tika的Maven依賴,可以輕松轉(zhuǎn)換MultipartFile為File類,從而獲取文件的Mime類型,最后列出了常見文件類型的Mime類型,方便使用

一、背景

判斷文件類型一般可采用兩種方式

1、后綴名判斷

簡(jiǎn)單易操作,但無法準(zhǔn)確判斷類型

2、文件頭信息判斷

通??梢耘袛辔募愋?,但有些文件類型無法判斷(如word和excel頭信息的前幾個(gè)字節(jié)是一樣的, 無法判斷)

使用apache.tika可輕松解決以上兩種方式存在的問題

二、Tika介紹

Apachhe Tika是基于java的內(nèi)容檢測(cè)和分析的工具包,可檢測(cè)并提取來自上千種不同文件類型(如PPT,XLS和PDF)中的元數(shù)據(jù)和結(jié)構(gòu)化文本。

三、使用方法

Maven工程中引入依賴

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.24.1</version>
</dependency>

注意tika-core和tika-parsers的區(qū)別,我這里導(dǎo)入的是tika-core

工具類(可現(xiàn)用)

使用示例
String fileName = multipartFile.getOriginalFilename();
FileTypeCheck.getFileTypeByFileName(fileName,multipartFile);
@Slf4j
public class FileTypeCheck {

    public static void getFileTypeByFileName(final String fileName, MultipartFile mFile) {
        Tika defaultTika = new Tika();
        String fileType;
        final File file = new File(fileName);
        try {
            FileUtils.copyInputStreamToFile(mFile.getInputStream(), file);
            fileType = defaultTika.detect(file);
            if (!FileTypeContant.FILE_TYPE_XLS.equals(fileType) && !FileTypeContant.FILE_TYPE_XLSX.equals(fileType)
                    && !FileTypeContant.FILE_TYPE_DOC.equals(fileType) && !FileTypeContant.FILE_TYPE_DOCX.equals(fileType) && !FileTypeContant.FILE_TYPE_PDF.equals(fileType)
                    && !FileTypeContant.FILE_TYPE_JSON.equals(fileType) && !FileTypeContant.FILE_TYPE_XML.equals(fileType)
                    && !FileTypeContant.FILE_TYPE_SVG.equals(fileType) && !FileTypeContant.FILE_TYPE_PNG.equals(fileType)) {
                throw new ZTBusinessException("請(qǐng)上傳正確的文件類型!!!");
            }
        } catch (IOException e) {
            log.error("getFileTypeByFileName exception:", e);
        } finally {
            if (file.exists()) {
                file.delete();
            }
        }
    }

}
public class FileTypeContant {

    public static final String FILE_TYPE_XLS = "application/vnd.ms-excel";
    public static final String FILE_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    public static final String FILE_TYPE_DOC = "application/msword";
    public static final String FILE_TYPE_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
    public static final String FILE_TYPE_PDF = "application/pdf";
    public static final String FILE_TYPE_JSON = "application/json";
    public static final String FILE_TYPE_XML = "application/xml";
    public static final String FILE_TYPE_PNG = "image/png";
    public static final String FILE_TYPE_SVG = "image/svg";

}

四、MultipartFile類轉(zhuǎn)File類

其中,前端傳過來的是MultipartFile類,所以后端要轉(zhuǎn)換為File類,轉(zhuǎn)換方法為

//MultipartFile轉(zhuǎn)File
File file = new File(path); 
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);  
 
/*其中File可以
  File file = new File(mFile.getOriginalFilename());
  這是保存在了工程路徑下,用完要?jiǎng)h除
  file.delete();
*/
 
 
//File轉(zhuǎn)MultipartFile
File file = new File("src/test/resources/input.txt");
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile =new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));

五、常見文件類型

MimeType文件類型
application/mswordword(.doc)
application/vnd.ms-powerpointpowerpoint(.ppt)
application/vnd.ms-excelexcel(.xls)
application/vnd.openxmlformats-officedocument.wordprocessingml.documentword(.docx)
application/vnd.openxmlformats-officedocument.presentationml.presentationpowerpoint(.pptx)
application/vnd.openxmlformats-officedocument.spreadsheetml.sheetexcel(.xlsx)
application/x-rar-compressedrar
application/zipzip
application/pdfpdf
video/*視頻文件
image/*圖片文件
text/plain純文本
text/csscss文件
text/htmlhtml文件
text/x-java-sourcejava源代碼
text/x-csrcc源代碼
text/x-c++srcc++源代碼

六、總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解IDEA2020新建spring項(xiàng)目和c3p0連接池的創(chuàng)建和使用

    詳解IDEA2020新建spring項(xiàng)目和c3p0連接池的創(chuàng)建和使用

    C3P0是一個(gè)開源的JDBC連接池,它實(shí)現(xiàn)了數(shù)據(jù)源和JNDI綁定,本文就使用Spring實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java判斷空的實(shí)現(xiàn)方法

    java判斷空的實(shí)現(xiàn)方法

    字符串判斷空有兩種情況:一個(gè)是分配了內(nèi)存但值為空(""),另一個(gè)是未分配內(nèi)存(null),判斷方法包括isEmpty()和isBlank(),其中isBlank()還可以過濾空格、制表符,對(duì)于列表,判斷不為空可以使用list!=null && !list.isEmpty()或list!=null && list.size()>0
    2024-09-09
  • 將SpringBoot項(xiàng)目無縫部署到Tomcat服務(wù)器的操作流程

    將SpringBoot項(xiàng)目無縫部署到Tomcat服務(wù)器的操作流程

    SpringBoot 是一個(gè)用來簡(jiǎn)化 Spring 應(yīng)用初始搭建以及開發(fā)過程的框架,我們可以通過內(nèi)置的 Tomcat 容器來輕松地運(yùn)行我們的應(yīng)用,本文給大家介紹 SpringBoot 項(xiàng)目部署到獨(dú)立 Tomcat 服務(wù)器的操作流程,需要的朋友可以參考下
    2024-05-05
  • 關(guān)于SpringGateway調(diào)用服務(wù) 接受不到參數(shù)問題

    關(guān)于SpringGateway調(diào)用服務(wù) 接受不到參數(shù)問題

    這篇文章主要介紹了關(guān)于SpringGateway調(diào)用服務(wù)接受不到參數(shù)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java實(shí)現(xiàn)多人聊天對(duì)話室

    java實(shí)現(xiàn)多人聊天對(duì)話室

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人聊天對(duì)話室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java?引用傳遞的三種類型小結(jié)

    java?引用傳遞的三種類型小結(jié)

    這篇文章主要介紹了java?引用傳遞的三種類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解決eclipse上傳svn忽略target文件夾的坑

    解決eclipse上傳svn忽略target文件夾的坑

    這篇文章主要介紹了解決eclipse上傳svn忽略target文件夾的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringSecurity安全框架的使用

    SpringSecurity安全框架的使用

    SpringSecurity是一個(gè)用于企業(yè)應(yīng)用系統(tǒng)的安全框架,可以控制用戶登錄權(quán)限,實(shí)現(xiàn)不同權(quán)限用戶訪問不同內(nèi)容,文章介紹了SpringSecurity的簡(jiǎn)單配置和使用,包括環(huán)境搭建、測(cè)試用例和自定義登錄頁(yè)面的配置
    2025-02-02
  • mybatis中嵌套使用foreach需要注意的坑

    mybatis中嵌套使用foreach需要注意的坑

    在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),如果需要在一個(gè)大的foreach標(biāo)簽中嵌套另一個(gè)foreach,需要注意內(nèi)層foreach的item屬性不能與外層重復(fù),如果出現(xiàn)重復(fù),會(huì)導(dǎo)致綁定參數(shù)時(shí)找不到正確的參數(shù),從而拋出異常
    2024-09-09
  • Struts2開發(fā)環(huán)境搭建 附簡(jiǎn)單登錄功能實(shí)例

    Struts2開發(fā)環(huán)境搭建 附簡(jiǎn)單登錄功能實(shí)例

    這篇文章主要介紹了Struts2開發(fā)環(huán)境搭建,為大家分享一個(gè)簡(jiǎn)單登錄功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論

应城市| 新乐市| 建德市| 竹北市| 襄垣县| 津市市| 兴义市| 赫章县| 门头沟区| 安乡县| 濮阳县| 浦江县| 桃江县| 启东市| 进贤县| 铜鼓县| 长垣县| 安徽省| 锡林郭勒盟| 嵊泗县| 达日县| 河间市| 宜君县| 清镇市| 临猗县| 南皮县| 邹城市| 岱山县| 遂宁市| 嘉禾县| 杭锦后旗| 凌云县| 砀山县| 丹凤县| 北流市| 石林| 扶沟县| 青河县| 高密市| 揭东县| 方山县|