免责声明我知道 Content-Disposition 标头要发送回客户端以设置下载的文件名-但是我的问题比这要复杂一些
我有一个应用程序(使用 rails 3.1.3 的 RubyOnRails),它本质上是一个文档搜索/查看应用程序(搜索文档,然后在浏览器中呈现它们)。这是使用 iframe 完成的。
<iframe src="<%= @frameURL %>" width="100%" height="100%">
@frameURL
是plugin
对我们 Documents 控制器函数的调用。插件函数对我们的后端 API 进行 RESTful 调用以检索引用的文档,然后将文档内容发送回浏览器以在 iframe 中呈现。
这对于 JPEG、PDF、TXT 等文档非常有效。但是,当浏览器不知道如何处理内容类型时(如 word 文档 - 我们运行 Mac OS-X) - 然后浏览器下载返回的文件如plugin.doc
<- 注意这是没有设置 Content-Disposition 标头。
由于我们希望在需要下载文件时适当地命名文件,因此我们设置了 Content-Disposition 标头:
response.headers['Content-Disposition'] = "attachment; filename.extension"
现在文件被下载为filename.doc
- 但是,使用此标头集,即使是浏览器可以在内部呈现的 JPEG 等文件也会被下载。
问题:
plugin.extension
当我们不设置 Content-Disposition 标头时,有谁知道 rails 或浏览器在哪里获取名称?有没有办法设置 Content-Disposition 但只有在浏览器无法呈现文档时才应用它 - 所以默认应该是浏览器处理它可以处理的一切,作为后备,浏览器使用 Content-Disposition 内容来命名下载的文件。
谢谢!