代码之家  ›  专栏  ›  技术社区  ›  Richard H

HttpServletRequest:如何确定请求资产的内容类型

  •  2
  • Richard H  · 技术社区  · 15 年前

    我正在使用Jetty编写一个快速而肮脏的静态文件服务器。我需要为每个响应设置内容类型:

    HttpServletResponse.setContentType("content/type");
    

    对于给定的文件请求,如何可靠地确定要设置的内容类型?这是一个检查文件扩展名的问题,还是有更复杂的方法?(例如,如果没有文件扩展名,或者扩展名不反映内容类型怎么办?)

    谢谢Richard

    3 回复  |  直到 15 年前
        1
  •  2
  •   jamesmortensen Arjan    14 年前

    因为您在问题中使用的是HttpServletResponse对象,所以我假设您的控制器中有ServletContext。我只是用servletContext提供的方法解决了这个问题。

    因为您正在编写一个文件服务器,所以只需在ServletContext的getMimeType方法中传入文件的路径,如果可以确定的话,它应该返回mimeType。

    String path = "/js/example.js";
    String mimeType = getServletContext().getMimeType(path);
    resp.setContentType(mimeType);   // HttpServletResponse object
    

    注意:在这个特定示例中,将内容类型设置为“application-x/javascript”。

    其他信息: 我相信这个解决方案还假设您的文件存储在ServletContext可以访问的位置。如果不是,那么其他解决方案之一可能是最好的。

        2
  •  1
  •   Pablo Fernandez    15 年前

    你不能检查一下请求头吗 Content-Type 然后做出回应?

    我不知道你打算支持哪种类型的客户端,但如果它们是浏览器,我想你应该不会介意。如果你控制了客户机,那么不管怎样,他们都会向你发送那个标题,这是一个很好的做法。

    祝你好运

        3
  •  0
  •   YoK    15 年前

    你可以用 URLConnection.guessContentTypeFromStream

    InputStream is = new BufferedInputStream(new FileInputStream(file));
    mimeType = URLConnection.guessContentTypeFromStream(is);