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


122

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

  • 如果浏览器能够呈现给定内容类型的内容,则应将其显示在浏览器窗口中。

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

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

“附件; filename =” myfile.txt“”

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

如果未设置Content-Disposition,则在“另存为”对话框中使用的文件名是URL上无法使用的文件名。

我也尝试设置Content-Disposition为,inline但结果是相同的。

Answers:


173

正确的方法可能是:

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


7
我不确定在写此答案时您所说的“未得到广泛支持”是什么意思,希望您给出了事实而不是FUD。我刚刚在IE 6,IE 8,现代的Chrome和现代的Firefox中进行了测试,并且可以在所有这些工具中使用;据我所知,现在使用此方法是完全安全的。
Mark Amery 2014年

不适用于我的FireFox 37.0.2和Internet Explorer 11.0.18。出现另存为对话框。Chrome可以运作。
2015年

3
实际上,它确实可以在Firefox 37.0.2和IE 11.0.18(经测试)中使用。您可能使用的是浏览器无法内联显示的Content-Type。
Patonza

1
stackoverflow.com/questions/93551/…上的各种讨论中也包含一些注意事项-如果文件名中有空格,则文件名必须加双引号(")。如果文件名中包含非ASCII字符,则应该看到另一个问题以讨论处理方法。
Christopher Schultz

在IE11.0.96中不适用于PDF。毫不奇怪,Chrome可以正常工作。
user1566694 '19

2

我不确定默认情况下是否可行。出于安全方面的考虑,浏览器不会发送他们可以处理的所有内容类型,而只是发送一些Accept-Encoding,这在您的情况下无济于事。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.