【问题标题】:rails link_to download filerails link_to 下载文件
【发布时间】:2016-08-21 23:53:10
【问题描述】:

我需要添加一个链接以从 assets/docs/Физика.pdf 下载文件 我不知道该怎么做。 我在这里尝试这样做:在视图中-

<%= link_to "download", '/Физика.pdf', :download => 'filename' %>

我收到一条错误消息:

No route matches [GET] "/%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0.pdf"

我做错了什么? 请帮帮我

【问题讨论】:

  • 试试这个link
  • 也许只是&lt;%= link_to 'download', '/assets/docs/Физика.pdf' %&gt;&lt;%= link_to 'download', asset_path('/docs/Физика.pdf') %&gt;

标签: ruby-on-rails link-to


【解决方案1】:

第 1 步:视图

<%= link_to "download", download_path, target: "_blank"%>

第 2 步:路由

match 'download', to: 'home#download', as: 'download', via: :get

第 3 步:内部控制器

send_file 'public/pdf/user.png', type: 'image/png', status: 202

【讨论】:

    【解决方案2】:

    您可以执行以下步骤:

    Step1:打开文件routes.rb

    get 'download_pdf', to: "homes#download_pdf"
    

    Step2:我假设你的controllerhome_controller.rb,你把这行:

    def download_pdf
      send_file "#{Rails.root}/app/assets/docs/Физика.pdf", type: "application/pdf", x_sendfile: true
    end
    

    第 3 步:在您的 view 文件中。

    <%= link_to "download", download_pdf_path %>
    

    我建议你应该把这个docs文件夹放在public文件夹中。

    例如: public/docs/*.pdf

    【讨论】:

    • 在 Rails 7 上运行顺利。
    【解决方案3】:

    /assets 中放置文件时,您可以使用Rails 助手#asset_path

    <%= link_to 'download', asset_path('/docs/Физика.pdf') %>
    

    来源:http://guides.rubyonrails.org/asset_pipeline.html#asset-organization

    【讨论】:

      【解决方案4】:

      试试这个:

      <%= link_to 'download', root_path << '/assets/docs/Физика.pdf' %>
      

      【讨论】:

      • 没有帮助(没有路线匹配 [GET] "/assets/docs/%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0.pdf "
      • @StivenFrams 你得到解决方案了吗?我面临同样的错误。
      【解决方案5】:

      奇怪的是,在你的 link_to 帮助器中使用 HTML 下载属性就可以了

      <%= link_to "Download", file.file(:original, false), download:true %>
      

      希望这对未来有所帮助!

      【讨论】:

      • 您应该将文件名传递给“下载”,即。 e. download: file.filename 而不是 download: true
      【解决方案6】:

      文档说明如何建立附件文件的下载链接,如下所示

      <a href="<%= user.avatar.attached? ? rails_blob_path(user.avatar, disposition: 'attachment') : '#' %>" target="_blank" download>Link</a>
      

      【讨论】:

        【解决方案7】:

        什么对我有用,也是最简单的:

        = link_to "Click to download", asset_path("logo.png"), download: true
        

        【讨论】:

          【解决方案8】:

          Rails 6 解决方案:

          第 1 步:在您的 routes.rb 文件中创建下载路径:

          get 'download_pdf', to: "homes#download_pdf"
          

          第 2 步:将链接添加到您的 views

          <%= link_to "download", download_single_path(url: 'url', file_name: 'filename') %>
          

          第 3 步:在您的控制器 homes_controller.rb 中添加操作,您可以在其中获取您在 link_to 中传递的参数:

          def download_pdf
            require 'open-uri'
            url = params[:url]
            file_name = params[file_name]
            data = open(url).read
            send_data data, :disposition => 'attachment', :filename=>"#{file_name}.pdf"
          end
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-03-04
            • 1970-01-01
            • 2014-03-10
            • 1970-01-01
            • 1970-01-01
            • 2019-01-19
            • 2013-07-10
            • 1970-01-01
            相关资源
            最近更新 更多