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

时间:2010-01-19 22:41:47

标签: ruby-on-rails http

我有一个标准的restful rails应用程序。

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

当网址为

http://localhost:3000/users.csv

我得到一个名为users.csv的文件。

但是如果网址是

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

然后我得到的文件有名字用户。我想将文件名设置为users.csv。

4 个答案:

答案 0 :(得分:2)

这是浏览器的默认文件命名。浏览器对format参数的含义一无所知。它只是看到被访问的资源被称为“用户”,因此它默认为该文件名。

在前一个示例中,请求的资源称为users.csv,因此它将其用作默认文件名。

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

Content-disposition: attachment; filename=foo.csv

查看this Microsoft link以获取更多信息。 rails的概念与任何HTTP技术的概念相同。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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