我正在上传文件,我想从上传的文件中获取Mime类型。
我试图使用 request.getContentType(),但是当我打电话时:
String contentType = req.getContentType();
它将返回:
的multipart / form-data的;边界= --------------------------- 310662768914663
如何获得正确的值?
提前致谢
答案 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文件的开销。 (对不起,我把它拿回去了,因为你可以通过编程方式向地图添加实例,这将是它检查的第一个地方)