我有一个标准的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。
答案 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
标头。