我正在使用Jetty编写一个快速且脏的静态文件服务器。我需要为每个响应设置Content-Type:
HttpServletResponse.setContentType("content/type");
对于给定的文件请求,如何可靠地确定要设置的内容类型?这是检查文件扩展名的问题,还是有更复杂的方法? (例如,如果没有文件扩展名,或者扩展名没有反映内容类型,该怎么办?)
谢谢理查德
答案 0 :(得分:1)
您是否只能检查请求标头Content-Type
并将响应设置为?
我不知道您打算支持的客户类型,但如果它们是浏览器,我猜您应该没问题。如果您控制客户端,那么他们最好向您发送该标题。
祝你好运!
答案 1 :(得分:0)
您可以使用URLConnection.guessContentTypeFromStream
InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
答案 2 :(得分:0)
由于您在问题中使用了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可访问的位置。如果没有,那么其他解决方案之一可能是最好的。