Spring 之MultipartFile转换File 并鉴别File Mine Type 类型

常见 MIME 类型列表

扩展名文档类型MIME 类型
.aacAAC audioaudio/aac
.abwAbiWord documentapplication/x-abiword
.arcArchive document (multiple files embedded)application/x-freearc
.aviAVI: Audio Video Interleavevideo/x-msvideo
.azwAmazon Kindle eBook formatapplication/vnd.amazon.ebook
.binAny kind of binary dataapplication/octet-stream
.bmpWindows OS/2 Bitmap Graphicsimage/bmp
.bzBZip archiveapplication/x-bzip
.bz2BZip2 archiveapplication/x-bzip2
.cshC-Shell scriptapplication/x-csh
.cssCascading Style Sheets (CSS)text/css
.csvComma-separated values (CSV)text/csv
.docMicrosoft Wordapplication/msword
.docxMicrosoft Word (OpenXML)application/vnd.openxmlformats-officedocument.wordprocessingml.document
.eotMS Embedded OpenType fontsapplication/vnd.ms-fontobject
.epubElectronic publication (EPUB)application/epub+zip
.gifGraphics Interchange Format (GIF)image/gif
.htm
.html
HyperText Markup Language (HTML)text/html
.icoIcon formatimage/vnd.microsoft.icon
.icsiCalendar formattext/calendar
.jarJava Archive (JAR)application/java-archive
.jpeg
.jpg
JPEG imagesimage/jpeg
.jsJavaScripttext/javascript
.jsonJSON formatapplication/json
.jsonldJSON-LD formatapplication/ld+json
.mid
.midi
Musical Instrument Digital Interface (MIDI)audio/midi audio/x-midi
.mjsJavaScript moduletext/javascript
.mp3MP3 audioaudio/mpeg
.mpegMPEG Videovideo/mpeg
.mpkgApple Installer Packageapplication/vnd.apple.installer+xml
.odpOpenDocument presentation documentapplication/vnd.oasis.opendocument.presentation
.odsOpenDocument spreadsheet documentapplication/vnd.oasis.opendocument.spreadsheet
.odtOpenDocument text documentapplication/vnd.oasis.opendocument.text
.ogaOGG audioaudio/ogg
.ogvOGG videovideo/ogg
.ogxOGGapplication/ogg
.otfOpenType fontfont/otf
.pngPortable Network Graphicsimage/png
.pdfAdobe Portable Document Format (PDF)application/pdf
.pptMicrosoft PowerPointapplication/vnd.ms-powerpoint
.pptxMicrosoft PowerPoint (OpenXML)application/vnd.openxmlformats-officedocument.presentationml.presentation
.rarRAR archiveapplication/x-rar-compressed
.rtfRich Text Format (RTF)application/rtf
.shBourne shell scriptapplication/x-sh
.svgScalable Vector Graphics (SVG)image/svg+xml
.swfSmall web format (SWF) or Adobe Flash documentapplication/x-shockwave-flash
.tarTape Archive (TAR)application/x-tar
.tif
.tiff
Tagged Image File Format (TIFF)image/tiff
.ttfTrueType Fontfont/ttf
.txtText, (generally ASCII or ISO 8859-n)text/plain
.vsdMicrosoft Visioapplication/vnd.visio
.wavWaveform Audio Formataudio/wav
.webaWEBM audioaudio/webm
.webmWEBM videovideo/webm
.webpWEBP imageimage/webp
.woffWeb Open Font Format (WOFF)font/woff
.woff2Web Open Font Format (WOFF)font/woff2
.xhtmlXHTMLapplication/xhtml+xml
.xlsMicrosoft Excelapplication/vnd.ms-excel
.xlsxMicrosoft Excel (OpenXML)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlXMLapplication/xml 代码对普通用户来说不可读 (RFC 3023, section 3)
text/xml 代码对普通用户来说可读 (RFC 3023, section 3)
.xulXULapplication/vnd.mozilla.xul+xml
.zipZIP archiveapplication/zip
.3gp3GPP audio/video containervideo/3gpp
audio/3gpp(若不含视频)
.3g23GPP2 audio/video containervideo/3gpp2
audio/3gpp2(若不含视频)
.7z7-zip archiveapplication/x-7z-compressed

检查文件类型,先为pom.xml 添加第三方依赖:jmimemagic 类包

    <dependency>
			<groupId>net.sf.jmimemagic</groupId>
			<artifactId>jmimemagic</artifactId>
			<version>0.1.5</version>
		</dependency>

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);
	}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值