我正在上传文件,我想从上传的文件中获取Mime类型。
我试图使用 request.getContentType() ,但是当我打电话时:
String contentType = req.getContentType();
它将返回:
多部分/表单数据;边界= --------------------------- 310662768914663
如何获得正确的值?
提前致谢
听起来好像您在本地开发一个multipart/form-data解析器。我不建议这样做。而是使用像Apache Commons FileUpload这样的体面的工具。对于上载的文件,它提供了一个FileItem#getContentType()提取客户端指定的内容类型(如果有)的功能。
multipart/form-data
FileItem#getContentType()
String contentType = item.getContentType();
如果返回null(只是因为客户端未指定),则可以利用ServletContext#getMimeType()基于文件名的好处。
null
ServletContext#getMimeType()
String filename = FilenameUtils.getName(item.getName()); String contentType = getServletContext().getMimeType(filename);
这将根据<mime-mapping>servlet容器默认值web.xml(例如Tomcat,在中出现/conf/web.xml)中的条目web.xml以及您的Web应用程序(如果有)的条目进行解析,这些内容可以扩展/覆盖servlet容器的默认映射。
<mime-mapping>
web.xml
/conf/web.xml
但是,您需要记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要表示 实际的 文件内容。例如,客户端可以只编辑文件扩展名。在业务逻辑中使用此信息时要小心。