2013-04-29 54 views
2

我一直在试图找到一种方法来设置我的Web应用程序中的静态资源的内容类型,这些静态资源是作为可下载的链接提供的。例如,我有一个.CSV文件,当我在浏览器上提供此链接时,点击它在新窗口中打开。我真正想要的是1)自动下载或2)浏览器抛出'打开或另存为'对话框。我使用Icefaces来呈现链接,但这并不重要,我可以用javascript或jquery使用纯html。这是我的代码。设置静态资源的内容类型

<ice:outputLink id="location" value="#{bean.downloadLink}" type="application/x-download" target="_blank"> 
     <ice:outputText value="Download"/> 
</ice:outputLink> 

请注意,我没有通过http响应流式传输文件内容。如果我这样做了,我可以轻松设置内容类型和内容处置标签以实现我想要的内容。我真正想要的是在静态资源呈现为直接链接的同时设置这些标头的方法。

回答

3

只需提供一个带有效扩展名的URL,并在必要时注册一个内容类型为<mime-mapping>的扩展名为web.xml

E.g.这最终是由JSF产生以下链接,无论组件的使用:

<a href="file.csv">Download</a> 

<mime-mapping> 
    <extension>csv</extension> 
    <mime-type>text/csv</mime-type> 
</mime-mapping> 

注意,servlet容器在默认情况下已经MIME映射在自己的web.xml整个列表,其中包括CSV。只有例如OpenXML Office文档(docx,xl​​sx等)和HTML5图像格式(SVG)可能需要手动注册。

+0

完美!这是我正在寻找的。谢谢BalusC :) – IndoKnight 2013-04-29 13:22:47

+0

不客气。 – BalusC 2013-04-29 13:25:33

+0

自上星期五我一直在寻找这个。谢谢,@BalusC! – ViniciusPires 2014-12-22 13:20:41