JSP:文件上传时获取MIME类型

6

我正在进行文件上传,需要获取上传文件的Mime类型。

我尝试使用 request.getContentType(),但是当我调用:

String contentType = req.getContentType();

它将返回:

multipart/form-data; boundary=---------------------------310662768914663

如何获取正确的值?

提前致谢。

3个回答

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);
这将根据servlet容器默认的web.xml文件(例如Tomcat,位于/conf/web.xml中)中的条目以及您的Web应用程序的web.xml文件(如果有的话,可以扩展/覆盖servlet容器的默认映射)来解决。但是,请记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要表示实际的文件内容。例如,客户端可能只编辑文件扩展名。在业务逻辑中使用此信息时要小心。

相关文章:

帮了我大忙。我的问题是在 MultipartFile attachmentFile = multipartRequest.getFile("filename") 中指定了 'application/octet-stream',但只有 getServletContext().getMimeType(filename) 给出了真正的内容类型。 - Vadim

0

只需使用:

public String ServletContext.getMimeType(String file)

0

你可以使用MimetypesFileTypeMap

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

然而,如果文件类型尚未列出,您将遇到编辑mime.types文件的开销。(抱歉,我收回了之前的话,因为您可以通过编程向映射中添加实例,并且那将是首先检查的地方)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接