2015-10-15 110 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

相關問題