如何在不强制“另存为”对话框的情况下设置响应文件名

Posted

技术标签:

【中文标题】如何在不强制“另存为”对话框的情况下设置响应文件名【英文标题】:How to set response filename without forcing "save as" dialog 【发布时间】:2010-12-17 00:21:48 【问题描述】:

我在一些响应中返回一个流,设置适当的content-type 标头。我正在寻找的行为是这样的:

如果浏览器能够呈现给定内容类型的内容,那么它应该在浏览器窗口中显示它。

如果浏览器不知道如何呈现内容,则应显示“另存为”对话框,其中文件名应为响应中提供的文件名。

问题是,如果我将Content-Disposition 标头设置为:

"附件;文件名="myfile.txt""

浏览器将始终显示“另存为”对话框。

如果我没有设置Content-Disposition,则“另存为”对话框中使用的文件名是在我的情况下不起作用的 URL 中的文件名。

我也尝试将Content-Disposition 设置为inline,但结果是一样的。

【问题讨论】:

【参考方案1】:

正确的方法可能是:

Content-Disposition: inline; filename="myfile.txt"

【讨论】:

我不确定您在写此答案时所说的“未得到广泛支持”是什么意思,并希望您给出确凿的事实而不是 FUD。我刚刚在 IE 6、IE 8、现代 Chrome 和现代 Firefox 中进行了测试,它适用于所有这些版本;据我所知,现在使用它是完全安全的。 不适用于我的 FireFox 37.0.2 和 Internet Explorer 11.0.18。我看到了一个“另存为”对话框。 Chrome 也可以。 实际上它在 Firefox 37.0.2 和 IE 11.0.18 中都可以工作(刚刚测试过)。您可能正在使用浏览器无法内联显示的 Content-Type。 ***.com/questions/93551/… 上的各种讨论也涵盖了一些注意事项 - 如果文件名中有空格,则需要在文件名周围加上双引号 (")。如果您的文件名中有非 ASCII 字符,您应该看到其他问题以讨论如何处理。 不适用于 IE11.0.96 中的 PDF。毫不奇怪,Chrome 运行良好。【参考方案2】:

我不确定默认情况下是否可行。出于安全考虑,浏览器不会发送它们可以处理的所有内容类型,而只会发送一些Accept-Encoding,这对您的场景没有多大帮助。

也许您可以询问您的用户他们喜欢什么并将该信息存储在他们的个人资料中。

【讨论】:

以上是关于如何在不强制“另存为”对话框的情况下设置响应文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Excel 文件另存为 CSV? [复制]

如何在“另存为”对话框中强制使用正确的文件扩展名? (.jpg 而不是 .php)

在不保存工作簿的情况下更改 Excel 中的默认另存为位置

通过 jQuery GET 强制“另存为”对话框

用“Content-Disposition:attachment;”强制弹出“另存为”对话框后,JS失效

如何将word转成html格式