【问题标题】:JSP: Get MIME Type on File UploadJSP:在文件上传时获取 MIME 类型
【发布时间】:2011-07-03 02:00:04
【问题描述】:

我正在上传文件,我想从上传的文件中获取 Mime 类型。

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

String contentType = req.getContentType();

它会返回:

多部分/表单数据;边界=---------------310662768914663

我怎样才能得到正确的值?

提前致谢

【问题讨论】:

    标签: java jsp servlets file-upload mime-types


    【解决方案1】:

    只需使用:

    public String ServletContext.getMimeType(String file)
    

    【讨论】:

      【解决方案2】:

      你可以使用MimetypesFileTypeMap

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

      但是,如果文件类型尚未列出,您会遇到编辑 mime.types 文件的开销。 (抱歉,我收回了这一点,因为您可以通过编程方式将实例添加到地图中,这将是它首先检查的地方)

      【讨论】:

        【解决方案3】:

        听起来好像您正在自制一个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 的默认 web.xml 中的 <mime-mapping> 条目(例如 Tomcat,它存在于 /conf/web.xml 中)以及您的 web 应用程序的 web.xml 中的条目(如果有)来解决,这可以展开/覆盖 servletcontainer 的默认映射。

        但是您需要记住,多部分内容类型的值完全由客户端控制,并且客户端提供的文件扩展名不一定需要代表 实际 文件内容.例如,客户端可以只编辑文件扩展名。在业务逻辑中使用此信息时要小心。

        相关:

        【讨论】:

        • 帮助了我。我的一个是为MultipartFile attachmentFile = multipartRequest.getFile("filename") 指定'application/octet-stream' 而只有getServletContext().getMimeType(filename) 给了我真正的内容类型。
        猜你喜欢
        • 2017-03-18
        • 2021-11-15
        • 2011-05-08
        • 1970-01-01
        • 2018-12-01
        • 2011-06-03
        • 2011-06-09
        • 2018-04-08
        • 2014-05-19
        相关资源
        最近更新 更多