扩展名 | 文档类型 | MIME 类型 |
---|---|---|
.aac |
AAC audio | audio/aac |
.abw |
AbiWord document | application/x-abiword |
.arc |
Archive document (multiple files embedded) | application/x-freearc |
.avi |
AVI: Audio Video Interleave | video/x-msvideo |
.azw |
Amazon Kindle eBook format | application/vnd.amazon.ebook |
.bin |
Any kind of binary data | application/octet-stream |
.bmp |
Windows OS/2 Bitmap Graphics | image/bmp |
.bz |
BZip archive | application/x-bzip |
.bz2 |
BZip2 archive | application/x-bzip2 |
.csh |
C-Shell script | application/x-csh |
.css |
Cascading Style Sheets (CSS) | text/css |
.csv |
Comma-separated values (CSV) | text/csv |
.doc |
Microsoft Word | application/msword |
.docx |
Microsoft Word (OpenXML) | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.eot |
MS Embedded OpenType fonts | application/vnd.ms-fontobject |
.epub |
Electronic publication (EPUB) | application/epub+zip |
.gif |
Graphics Interchange Format (GIF) | image/gif |
.htm |
HyperText Markup Language (HTML) | text/html |
.ico |
Icon format | image/vnd.microsoft.icon |
.ics |
iCalendar format | text/calendar |
.jar |
Java Archive (JAR) | application/java-archive |
.jpeg .jpg |
JPEG images | image/jpeg |
.js |
JavaScript | text/javascript |
.json |
JSON format | application/json |
.jsonld |
JSON-LD format | application/ld+json |
.mid .midi |
Musical Instrument Digital Interface (MIDI) | audio/midi audio/x-midi |
.mjs |
JavaScript module | text/javascript |
.mp3 |
MP3 audio | audio/mpeg |
.mpeg |
MPEG Video | video/mpeg |
.mpkg |
Apple Installer Package | application/vnd.apple.installer+xml |
.odp |
OpenDocument presentation document | application/vnd.oasis.opendocument.presentation |
.ods |
OpenDocument spreadsheet document | application/vnd.oasis.opendocument.spreadsheet |
.odt |
OpenDocument text document | application/vnd.oasis.opendocument.text |
.oga |
OGG audio | audio/ogg |
.ogv |
OGG video | video/ogg |
.ogx |
OGG | application/ogg |
.otf |
OpenType font | font/otf |
.png |
Portable Network Graphics | image/png |
.pdf |
Adobe Portable Document Format (PDF) | application/pdf |
.ppt |
Microsoft PowerPoint | application/vnd.ms-powerpoint |
.pptx |
Microsoft PowerPoint (OpenXML) | application/vnd.openxmlformats-officedocument.presentationml.presentation |
.rar |
RAR archive | application/x-rar-compressed |
.rtf |
Rich Text Format (RTF) | application/rtf |
.sh |
Bourne shell script | application/x-sh |
.svg |
Scalable Vector Graphics (SVG) | image/svg+xml |
.swf |
Small web format (SWF) or Adobe Flash document | application/x-shockwave-flash |
.tar |
Tape Archive (TAR) | application/x-tar |
.tif |
Tagged Image File Format (TIFF) | image/tiff |
.ttf |
TrueType Font | font/ttf |
.txt |
Text, (generally ASCII or ISO 8859-n) | text/plain |
.vsd |
Microsoft Visio | application/vnd.visio |
.wav |
Waveform Audio Format | audio/wav |
.weba |
WEBM audio | audio/webm |
.webm |
WEBM video | video/webm |
.webp |
WEBP image | image/webp |
.woff |
Web Open Font Format (WOFF) | font/woff |
.woff2 |
Web Open Font Format (WOFF) | font/woff2 |
.xhtml |
XHTML | application/xhtml+xml |
.xls |
Microsoft Excel | application/vnd.ms-excel |
.xlsx |
Microsoft Excel (OpenXML) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.xml |
XML |
application/xml 代码对普通用户来说不可读 (RFC 3023, section 3)text/xml 代码对普通用户来说可读 (RFC 3023, section 3) |
.xul |
XUL | application/vnd.mozilla.xul+xml |
.zip |
ZIP archive | application/zip |
.3gp |
3GPP audio/video container | video/3gpp audio/3gpp (若不含视频) |
.3g2 |
3GPP2 audio/video container | video/3gpp2 audio/3gpp2 (若不含视频) |
.7z |
7-zip archive | application/x-7z-compressed |
检查文件类型,先为pom.xml 添加第三方依赖:jmimemagic 类包
net.sf.jmimemagic
jmimemagic
0.1.5
Spring 之MultipartFile转换File 并鉴别File Mine Type 类型 核心功能代码:
public boolean checkFileType(MultipartFile uploadFile){
//文件名
String fileName = uploadFile.getOriginalFilename();
// 获取文件后缀
String suffix=fileName.substring(fileName.lastIndexOf("."));
File picFile = null;
try {
// 用uuid作为文件名,防止生成的临时文件重复
picFile = File.createTempFile(String.valueOf(idGenerator.nextId()), suffix);
FileUtils.copyInputStreamToFile(uploadFile.getInputStream(),picFile);
// MultipartFile to File
MagicMatch match = Magic.getMagicMatch(picFile, false);
String mimeType = match.getMimeType();
// 白名单匹配
boolean anyMatch = Arrays.stream(mimeTypeWhiteList).anyMatch(x -> x.equalsIgnoreCase(mimeType));
return anyMatch;
} catch (IOException e) {
System.out.println("生成临时文件异常");
logger.error("error: {}", e.getMessage(), e);
} catch (Exception e) {
System.out.println("MIME-TYPE检查发生异常");
logger.error("error: {}", e.getMessage(), e);
} finally {
//程序结束时,删除临时文件
if (picFile.exists()){
picFile.delete();
}
}
return false;
}
改业务功能代码应用于文件上传功能:
/**
* 通用文件上传功能; 备注:文件大小<=30M,如果超出规定文件大小,建议采用大文件上传
*
* @param entity
* @return
*/
@RequestMapping(value = "/fileUpload", method = { RequestMethod.POST })
@ResponseBody
@ApiOperation(httpMethod = "POST", value = "文件上传(小于等于30M)")
public Result upload(ChunkInfoModel entity) {
if (logger.isDebugEnabled()) {
logger.debug(entity.toString());
}
boolean target = checkFileType(entity.getFile());
if(!target){
return Result.error("上传电子包文件格式不支持,本项目仅支持zip格式");
}
SysEfileInfo model = null;
try {
String folder = null;
if(StringUtils.isEmpty(entity.getFolder())){
folder = "default";
} else {
folder = entity.getFolder();
}
model = upload.smallAttachUpload(entity, folder);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("error: {}", e.getMessage(), e);
}
return Result.ok("文件上传成功").setDatas("model", model);
}