對於MultipartFile使用tika判斷檔案型別,不會產生臨時檔案的方法
使用tika判斷檔案型別,不會產生臨時檔案的方法
因為字尾判斷檔案不安全,所以最近找了找判斷檔案型別的其他方法,總結就是使用檔案字尾和檔案頭來判斷或者基於tika和檔案字尾一同來做檔案型別的判斷,本次使用tika的方式來做檔案型別判斷,至於於配合個檔案字尾的方法就不寫了不是很難,就自己加上吧動動雙手成就未來.
首先是依賴
就去maven repository中搜尋tika-core就好了
還有一個tika-parsers我們沒弄明白他是做什麼的如果有了解的大佬可以評論一下
以下就是我的的程式碼區別就是因為使用springboot我們上傳檔案一般使用的是MultipartFile
現在網上的一些文章中一般都是使用的是File引數,就是會產生一個問題我需要讓MultipartFile轉換成File型別,以至於我們會在自己的專案中產生一個臨時檔案,在我們判斷完檔案型別之後我們呢還要刪除這個臨時檔案,我看了看大佬們的程式碼發現其實我們無論怎麼做都是要將檔案轉換成inputstream流的形式然後解析並且判斷mimetype
所以我們只需要直接將MultipartFile轉換成流的形式就好了,
以下是程式碼
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaMetadataKeys;
import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.springframework.web.multipart.MultipartFile;
import org.xml.sax.helpers.DefaultHandler;
import java.io.InputStream;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @auther 社畜阿藏
*/
public class FileTypeConfig {
/**
* 獲取型別
* @param file
* @return
*/
public static String getMimeType(MultipartFile file) {
AutoDetectParser parser = new AutoDetectParser();
parser.setParsers(new HashMap<MediaType, Parser>());
Metadata metadata = new Metadata();
metadata.add(TikaMetadataKeys.RESOURCE_NAME_KEY, file.getName());
try (InputStream stream = file.getInputStream()) {
parser.parse(stream, new DefaultHandler(), metadata, new ParseContext());
}catch (Exception e){
throw new RuntimeException();
}
return metadata.get(HttpHeaders.CONTENT_TYPE);
}
/**
* 判斷是否是圖片
* @param file
* @return
*/
public static boolean isImage(MultipartFile file){
String type = getMimeType(file);
System.out.println(type);
//對比對應的檔案型別的mime就好了至於不知道對應的是什麼的話就百度,百度一定會知道
Pattern pattern = Pattern.compile("image/.*");
Matcher m = pattern.matcher(type);
return m.matches();
}
}
如有問題歡迎指出,萬分感謝
相關文章
- Vim檔案型別判斷型別
- Java 使用魔數判斷檔案型別Java型別
- js根據字尾判斷檔案檔案型別的程式碼JS型別
- 如何判斷沒有字尾的檔案型別?型別
- jsp頁面判斷檔案上傳型別JS型別
- 再談檔案讀寫:判斷檔案的幾種方法及其優劣對比
- Mac OS X 避免產生臨時檔案 .DS_StoreMac
- PHP判斷檔案是否為圖片的方法PHP
- javaWeb不生成臨時檔案實現壓縮檔案下載JavaWeb
- C語言判斷檔案存在和建立檔案C語言
- Oracle資料檔案和臨時檔案的管理Oracle
- golang判斷檔案是否存在Golang
- python 判斷檔案是否存在Python
- 基於SpringWeb MultipartFile檔案上傳、下載功能SpringWeb
- C語言判斷檔案是否存在,判斷檔案可讀可寫可執行C語言
- JS判斷檔案上傳格式JS
- python的檔案型別Python型別
- 關於檔案系統在建立目錄檔案和普通檔案時的區別
- PHP檔案上傳字尾名與檔案型別對照表PHP型別
- javascript中對變數型別的判斷方法JavaScript變數型別
- [20190410]dg建立臨時表檔案資料檔案.txt
- 怎麼清理temp資料夾的臨時檔案?Win7系統電腦temp臨時檔案的清理方法Win7
- nodejs獲取檔案資訊,判斷是檔案或目錄NodeJS
- python使用pathlib庫 判斷Windows某個路徑下檔案修改日期最晚的檔案PythonWindows
- 檔案型別和副檔名型別
- .gitignore檔案配置:Altium Designer工程檔案型別Git型別
- 【SpringBoot】使用RestTemplate在服務之間進行MultipartFile格式檔案的傳遞【檔案上傳】Spring BootREST
- 使用帶型別判斷的比較判斷型別
- 判斷檔案為文字檔案還是二進位制檔案(C語言實現)C語言
- 檔案傳輸中斷怎麼辦?對檔案會有什麼影響?
- Python判斷物件是否為檔案物件(file object)的三種方法Python物件Object
- pycharm建立臨時檔案scatch filePyCharm
- Yoink for Mac(臨時檔案拖放助手)Mac
- win10如何刪除系統更新臨時檔案_windows10更新刪除臨時檔案操作方法Win10Windows
- springboot基於properties檔案型別安全配置Spring Boot型別
- 使用java的MultipartFile實現layui官網檔案上傳實現全部示例,java檔案上傳JavaUI
- 什麼是檔案?Linux檔案型別有哪些?Linux型別
- sublime設定儲存新檔案時的預設檔案型別(字尾名)型別