繁体   English   中英

Ruby on Rails-不下载文件

[英]Ruby on Rails - Not downloading file

我有此下载链接

<%= link_to "Curriculum Vitae", "/download/#{@user.candidato.cv.url}/#{@user.candidato.cv.content_type}" %>

如果我在没有控制器方法的情况下做了不好的选择,那么下载将起作用。 但是我在互联网上读了很多帖子,说这是一个不好的方法,所以我尝试了好方法。

这是我的控制器:

    def download
       send_file params[:url] , :type => params[:type], :x_sendfile => true
    end

和路线

match '/download/:url/:type', to: 'users#download', via: 'get'

当我单击链接时,将显示:

No route matches [GET] "/download/system/candidatos/cvs/000/000/001/original/blank_CV_template_Microsoft_Word.doc"

我到处搜索,但似乎找不到任何东西。 对于文件以及所有我正在使用的回形针

您的路线和方法名称不匹配。 如果您同时查看“ / download /:url /:type”和“ /download/system/candidatos/cvs/000/000/001/original/blank_CV_template_Microsoft_Word.doc”,则将其视为url和类型。 根据您的匹配路线,您的链接路径应为“下载/网址/类型”。

或者,您也可以采用更简单的方法。 在标记链接中,仅传递CV ID并以您的下载方法进行处理

match '/download/:id', to: 'users#download', via: 'get'

def download
   cv = Cv.find(params[:id])
   send_file cv.url , :type => cv.content_type, :x_sendfile => true
end

为我做了什么:

控制器:

def download
    path = params[:url]
    send_file "#{path}.#{params[:format]}" , :type => params[:type], :x_sendfile => true
  end

添加该格式是因为该路径即使在控制台中也包含了它从未在控制器中添加的扩展名。

视图:

<%= link_to "Curriculum Vitae", :action => :download, :url => @user.candidato.cv.path, :type => @user.candidato.cv.content_type %>

路线文件:

match '/download/:url', to: 'users#download', via: 'get'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM