[转]Spring 之MultipartFile转换File 并鉴别File Mine Type 类型
原文地址:Spring 之MultipartFile转换File 并鉴别File Mine Type 类型_spring mimetype-CSDN博客
常见 MIME 类型列表
扩展名	文档类型	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
.html	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
.tiff	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 类包
    <dependency>
			<groupId>net.sf.jmimemagic</groupId>
			<artifactId>jmimemagic</artifactId>
			<version>0.1.5</version>
		</dependency>
AI写代码
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;
	}
AI写代码
改业务功能代码应用于文件上传功能:
/**
	 * 通用文件上传功能; 备注:文件大小<=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);
	}
AI写代码
 
————————————————
版权声明:本文为CSDN博主「在奋斗的大道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouzhiwengang/article/details/115160563
 
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号