在rails应用程序中设置下载文件的文件名
我有一个控制器操作,允许用户下载扩展名为.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
你可以使用send_data :
send_data pptdata, :filename => 'your_file_name.ppt', :disposition => 'inline', :type => "multipart/related"
这样做的另一个好处是你可以使用x-sendfile,这样你就可以在客户端下载数据时等待/瘦了。
另一种选择是拥有如下路线:
/elements/3/files/foo.ppt
然后在您的FilesController的show方法中,您可以发送任何id参数。
一个可能的例子:
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
好。 这是一个非常古老的问题的答案,但是从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
源API文档
- rspec + capybara undefined局部变量或方法
- 在rake任务中使用open-uri 404错误…导致它的原因是什么?
- Cucumber Rails 3.1未初始化的常量ActionController :: Dispatcher(NameError)
- 如何在Ruby on Rails中为循环中的每个其他元素添加左和右类?
- 检查Capybara的复选框
- 使用HTTParty进行非常基本的Rails 4.1 API调用
- 为什么我的Rails可安装引擎无法正确加载辅助方法?
- 警告被视为铁路中的错误
- 无法通过Bundler安装gem。 远程:! 遥控器:遥控器:! 推送拒绝,无法编译Ruby app remote: