为什么?format = csv文件没有扩展名

问题描述:

我有一个标准的restful rails应用程序。为什么?format = csv文件没有扩展名

format.html { @users = User.find(:all, :limit => 10)} 
format.csv { @users = User.find(:all, :limit => 10) } 

当网址

http://localhost:3000/users.csv

我与名users.csv文件。

但是如果该URL

http://localhost:3000/users?format=csv

然后我得到的文件有名称的用户。我想要文件名为users.csv。

这是浏览器的默认文件命名即将开始。浏览器不知道format参数的含义。它只是看到被访问的资源被称为“用户”,所以它默认使用该文件名。

在前面的例子中,被请求的资源被称为users.csv,因此它使用它作为默认文件名。

您可能还想查看Content-Disposition HTTP标头。这将导致浏览器提示用户使用指定的文件名作为默认值保存文件(用户可以*修改),而不是在浏览器中显示文件。因此,你可以有你的资源是http://localhost:3000/users?format=csv,但是默认的文件名与此头foo.csv:

Content-disposition: attachment; filename=foo.csv 

退房this Microsoft link一些更多的信息。这个概念对于任何HTTP技术来说都是一样的。

Content-Disposition响应标题设置为attachment; filename=users.csv

您可以发送Content-disposition标头,其中包含filename参数以向用户建议默认文件名。例如,Content-dispostion: attachment; filename=users.csv

默认情况下,浏览器通常使用URL路径部分的最后一个组件(查询之前的部分,以?开头)作为文件名。某些浏览器(如Safari)如果不相信当前扩展名与MIME类型相匹配,也会添加基于MIME类型的扩展名,并且他们知道要使用哪种扩展名。

这是默认的MSIE行为。它忽略Content-Disposition标题的filename参数(如果您自己设置了任何参数)。如果你想让它在浏览器中工作,你真的需要将完整的文件名追加为URL的pathinfo。所有其他浏览器按预期尊重Content-Disposition标题。