我正在上传文件,我想从上传的文件中获取 Mime 类型。
我试图使用 request.getContentType(),但是当我调用时:
String contentType = req.getContentType();
它将返回:
multipart/form-data; boundary=---------------------------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);
这将根据<mime-mapping>
解决servletcontainer 默认条目 web.xml
(例如,对于 Tomcat,它存在于 /conf/web.xml
中)并且也在 web.xml
中你的 webapp,如果有的话,它可以扩展/覆盖 servletcontainer 的默认映射。
但是您需要记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要代表实际文件内容.例如,客户端可以只编辑文件扩展名。在业务逻辑中使用此信息时要小心。
相关:
关于java - JSP:在文件上传时获取 MIME 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096862/