我一直在尝试找到一种在我的网络应用程序中设置静态资源内容类型的方法,这些资源以可下载链接的形式提供。例如,我有一个 .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 响应流式传输文件内容。如果我这样做,我可以轻松设置内容类型和内容处置标签来实现我想要的。我真正想要的是一种在将静态资源渲染为直接链接的同时设置这些 header 的方法。
最佳答案
只需提供一个具有有效扩展名的 URL,并在必要时通过 <mime-mapping>
注册具有内容类型的扩展名。在web.xml
.
例如以下链接最终由 JSF 生成,无论您使用什么组件:
<a href="file.csv">Download</a>
与
<mime-mapping>
<extension>csv</extension>
<mime-type>text/csv</mime-type>
</mime-mapping>
请注意,servlet 容器默认情况下已经在其自己的 web.xml
中拥有完整的 mime 映射列表。等 CSV。仅例如 OpenXML Office 文档(docx、xlsx 等)和 HTML5 图像格式 (SVG) 可能需要手动注册。
关于javascript - 设置静态资源的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276465/