Chr*_*ier 14 controller ruby-on-rails download
我有一个控制器操作,允许用户下载扩展名为.ppt的文件.它不是真正的powerpoint二进制文件,只是powerpoint可以读取的xml-ish格式.该文件是从名为ElementsController的控制器的show动作下载的,但是show动作实际上并未在控制器中定义,但app/views/elements/show.ppt.builder中有一个模板文件.我在config/initializers/mime_types.rb中注册了Mime :: Type:
Mime::Type.register "multipart/related", :ppt
并正确下载文件,并在Windows系统上使用powerpoint打开,但问题是文件名.该文件的名称是3.ppt,其中三个是url中的id参数.我想知道是否有办法将文件名设置为比3.ppt更具描述性的东西.
谢谢,
-C
jon*_*nii 25
你可以使用send_data:
send_data pptdata, :filename => 'your_file_name.ppt',
:disposition => 'inline', :type => "multipart/related"
Run Code Online (Sandbox Code Playgroud)
这样做的另一个好处是你可以使用x-sendfile,这样你的mongrel/thin就不会在客户端下载数据时等待.
另一种选择是拥有如下路线:
/elements/3/files/foo.ppt
然后在您的FilesController的show方法中,您可以发送任何id参数.
Gra*_*eld 13
一个可能的例子:
def show
@item = Item.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.ppt {
response.headers['Content-Disposition'] = "attachment; filename=\"#{@item.filename}.ppt\""
} # show.ppt.erb
format.xml { render :xml => @item }
end
end
Run Code Online (Sandbox Code Playgroud)
小智 5
好的。这是一个非常古老的问题的答案,但从 Rails 3.2 开始,最简单的方法是将其设置为:
respond_to do |format|
format.html # index.html.erb
format.json { render json: @product }
format.csv { send_data @product.to_csv, :filename => "New-Product-filename.csv" }
format.xls
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12438 次 |
| 最近记录: |