我正在进行文件上传,需要获取上传文件的Mime类型。
我尝试使用 request.getContentType(),但是当我调用:
String contentType = req.getContentType();
它将返回:
multipart/form-data; boundary=---------------------------310662768914663
如何获取正确的值?
提前致谢。
我正在进行文件上传,需要获取上传文件的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);
这将根据servlet容器默认的web.xml文件(例如Tomcat,位于/conf/web.xml中)中的条目以及您的Web应用程序的web.xml文件(如果有的话,可以扩展/覆盖servlet容器的默认映射)来解决。但是,请记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要表示实际的文件内容。例如,客户端可能只编辑文件扩展名。在业务逻辑中使用此信息时要小心。只需使用:
public String ServletContext.getMimeType(String file)
你可以使用MimetypesFileTypeMap
String contentType = new MimetypesFileTypeMap().getContentType(fileName)); // gets mime type
然而,如果文件类型尚未列出,您将遇到编辑mime.types文件的开销。(抱歉,我收回了之前的话,因为您可以通过编程向映射中添加实例,并且那将是首先检查的地方)
MultipartFile attachmentFile = multipartRequest.getFile("filename")
中指定了'application/octet-stream'
,但只有getServletContext().getMimeType(filename)
给出了真正的内容类型。 - Vadim