我一直在尝试找到一种方法来为我的Web应用程序中的静态资源设置内容类型,这些资源是作为可下载的链接提供的。例如,我有一个.CSV文件,当我在浏览器上提供此链接时,点击它在新窗口中打开。我真正想要的是1)自动下载或2)浏览器抛出'打开或另存为'对话框。我正在使用Icefaces来呈现链接,但这没关系,我可以使用普通的html与javascript或jquery。这是我的代码。
<ice:outputLink id="location" value="#{bean.downloadLink}" type="application/x-download" target="_blank">
<ice:outputText value="Download"/>
</ice:outputLink>
请注意,我没有通过http响应流式传输文件内容。如果我这样做,我可以轻松设置内容类型和内容处置标签,以实现我想要的。我真正想要的是在将静态资源渲染为直接链接时设置这些标头的方法。
答案 0 :(得分:3)
只需提供包含有效扩展程序的网址,并在<mime-mapping>
web.xml
<a href="file.csv">Download</a>
之前注册包含内容类型的扩展程序。
E.g。以下链接最终由JSF生成,无论您使用哪个组件:
<mime-mapping>
<extension>csv</extension>
<mime-type>text/csv</mime-type>
</mime-mapping>
与
web.xml
请注意,默认情况下,servlet容器已在其自己的{{1}}中包含整个mime映射列表,其中包括CSV。仅举例来说,OpenXML Office文档(docx,xlsx等)和HTML5图像格式(SVG)可能需要手动注册。