2015-10-15 221 views
1

要我使用更具体:是可以安全使用的ServletContext#getMimeType()

public String getMimeType() { 
    ServletContext context = request.getServletContext(); 
    String filePath = request.getRequestURI().substring(request.getContextPath().length()+1, request.getRequestURI().length()); 
    String fileName = context.getRealPath(filePath);   
    return context.getMimeType(fileName); 
} 

确定从客户端请求(CSS,JS,字体等)的文件类型。取决于文件的类型,会发生不同的操作。这在浏览器中是否一致,或者通常是一种安全的方式来根据URL中传递的文件名来确定文件类型,还是很容易中断文件类型?

+0

它基于文件扩展名,而不是文件内容,所以它的方式不准确,因为不同的文件格式可能共享相同的扩展名。 – Andreas

+0

换句话说文件上传它是一个不走,但对于内部应用程序(要求我自己的资源),它应该是罚款?我一直注意到资源调用中的大量随机404,并且如果这是罪魁祸首,一直无法确定。所以没有办法request.getMimeType可能会返回基于浏览器正在做的事情的空值? – ryandlf

+0

你现在正在转换。你的代码是'context.getMimeType()',但现在你正在谈论'request.getMimeType()'。这是什么? – Andreas

回答

0

这是跨浏览器的一致吗?

与文件扩展名相关联MIME类型是在不通过客户机确定的该特定的代码段。它是由服务器基于在web.xml<mime-mapping>项决定。客户端控制的所有内容都是URL中的文件扩展名。但你已经知道了。

所以,你最好问,而不是“这是concistent跨服务器?”。这个问题的答案是没有。每台服务器都有自己的预定义MIME映射。旧的服务器可能缺乏新的MIME类型,例如XLSX,SVG等映射如果你想掩盖你感兴趣的每个MIME类型,你不必在目标服务器和控制它的配置,那么你更好地将其映射到webapp自己的web.xml中。


无关的具体问题,请跳过getRealPath()无稽之谈。这是一个体面的Web应用程序从不需要。而且,你根本不需要技术上的东西。一个URI或甚至唯一的文件名适用于getMimeType()方法。

+0

谢谢你添加无关。 – ryandlf

相关问题