簡體   English   中英

HttpServletRequest:如何確定所請求資產的Content-Type

[英]HttpServletRequest: How to determine Content-Type of requested asset

我正在使用Jetty編寫快速而又靜態的靜態文件服務器。 我需要為每個響應設置Content-Type:

HttpServletResponse.setContentType("content/type");

對於給定的文件請求,如何可靠地確定要設置的內容類型? 是檢查文件擴展名的問題,還是有更完善的方法? (例如,如果沒有文件擴展名,或者擴展名不反映內容類型怎么辦?)

謝謝理查德

您不能只檢查請求標頭Content-Type並設置響應嗎?

我不知道您打算支持哪種類型的客戶端,但是如果它們是瀏覽器,我想您應該會滿意。 如果您控制客戶端,則無論如何,最好將它們發送給您標頭。

祝好運!

由於您在問題中使用HttpServletResponse對象,因此我假設您在Controllers中可以使用ServletContext。 我只是使用ServletContext中可用的方法解決了同樣的問題。

由於您正在編寫文件服務器,因此只需在ServletContext的getMimeType方法中傳遞文件的路徑,並且它可以返回mimeType(如果可以確定)。

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

注意:在此特定示例中,將內容類型設置為“ application-x / javascript”。

附加信息:我相信該解決方案還假定您的文件存儲在ServletContext可訪問的位置。 如果沒有,那么其他解決方案之一可能是最好的。

您可以使用URLConnection.guessContentTypeFromStream

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM