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

时间:2011-02-23 20:44:26

标签: java jsp servlets file-upload mime-types

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

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

String contentType = req.getContentType();

它将返回:

  

的multipart / form-data的;边界= --------------------------- 310662768914663

如何获得正确的值?

提前致谢

3 个答案:

答案 0 :(得分:22)

听起来好像你正在养成一个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的默认<mime-mapping>中的web.xml条目(例如Tomcat,它出现在/conf/web.xml中)以及web.xml上的{{1}}来解决你的webapp,如果有的话,可以扩展/覆盖servletcontainer的默认映射。

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

相关:

答案 1 :(得分:0)

只需使用:

public String ServletContext.getMimeType(String file)

答案 2 :(得分:0)

您可以使用MimetypesFileTypeMap

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

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