對於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檔案型別判斷型別
- ASP.NET上傳檔案對檔案型別的高階判斷ASP.NET型別
- java通過檔案頭內容判斷檔案型別Java型別
- ios判斷檔案或圖片的型別iOS型別
- js根據字尾判斷檔案檔案型別的程式碼JS型別
- Python判斷上傳檔案型別Python型別
- python準確判斷檔案型別Python型別
- Linux 中 7 個判斷檔案系統型別的方法Linux型別
- 如何判斷沒有字尾的檔案型別?型別
- 檔案-臨時檔案
- 用ASP.net判斷上傳檔案型別的三種方法ASP.NET型別
- jsp頁面判斷檔案上傳型別JS型別
- Linux中用st_mode判斷檔案型別Linux型別
- 臨時檔案的順序和絕對檔案號
- Mac OS X 避免產生臨時檔案 .DS_StoreMac
- 再談檔案讀寫:判斷檔案的幾種方法及其優劣對比
- 臨時檔案
- javaWeb不生成臨時檔案實現壓縮檔案下載JavaWeb
- MYSQL 5.7中臨時檔案的使用MySql
- PHP判斷檔案是否為圖片的方法PHP
- java判斷檔案是否存在並建立檔案Java
- Nrpe外掛新定義對重要檔案使用MD5判斷檔案被修改
- IOS UTI統一型別識別符號:判斷檔案型別通過字尾iOS型別符號
- Oracle資料檔案和臨時檔案的管理Oracle
- C語言判斷檔案存在和建立檔案C語言
- Python 判斷檔案是否存在的三種方法Python
- golang判斷檔案是否存在Golang
- vc判斷檔案是否存在
- 臨時資料檔案
- 產生的檔案找不到
- javascript中對變數型別的判斷方法JavaScript變數型別
- 基於SpringWeb MultipartFile檔案上傳、下載功能SpringWeb
- C語言判斷檔案是否存在,判斷檔案可讀可寫可執行C語言
- 對於檔案File型別中的目錄分隔符型別
- Python判斷一個檔案中的字串是否存在於另外一個檔案中Python字串
- JS判斷檔案上傳格式JS
- python 判斷檔案是否存在Python
- Node判斷檔案是否連結