JSP:在文件上载中获取MIME类型

我正在上传文件,我想从上传的文件中获取Mime类型。

我试图使用request.getContentType() ,但是当我调用时:

String contentType = req.getContentType(); 

它将返回:

多部分/格式的数据; 边界= ————————— 310662768914663

我怎样才能得到正确的价值?

提前致谢

这听起来好像你正在为一个multipart/form-data解析器做主。 我不建议那样做。 而是使用像Apache Commons FileUpload这样的体面的。 对于上传的文件,它提供了FileItem#getContentType()来提取客户端指定的内容类型(如果有)。

 String contentType = item.getContentType(); 

如果它返回null (只是因为客户端没有指定它),那么你可以根据文件名利用ServletContext#getMimeType()

 String filename = FilenameUtils.getName(item.getName()); String contentType = getServletContext().getMimeType(filename); 

这将基于servletcontainer的默认web.xml 条目(例如Tomcat,它存在于/conf/web.xml )以及webapp的web.xml (如果有),它可以扩展/覆盖servletcontainer的默认映射。

但是,您需要记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要表示实际的文件内容。 例如,客户端可以只编辑文件扩展名。 在业务逻辑中使用此信息时要小心。

有关:

  • 如何在JSP / Servlet中上传文件?
  • 如何检查上传的文件是否是图像?

只需使用:

 public String ServletContext.getMimeType(String file) 

您可以使用MimetypesFileTypeMap

 String contentType = new MimetypesFileTypeMap().getContentType(fileName)); // gets mime type 

但是,如果尚未列出文件类型,则会遇到编辑mime.types文件的开销。 (对不起,我把它拿回来,因为你可以通过编程方式向地图添加实例,这将是它检查的第一个地方)