【问题标题】:Download file using gem Paperclip使用 gem Paperclip 下载文件
【发布时间】:2015-12-27 11:05:11
【问题描述】:

我想了解如何使用 Paperclip 下载文件。我将文件上传到本地存储。

型号:

class AFile < ActiveRecord::Base
  has_attached_file :attach,
  :url => "public/attach/:basename.:extension",
  :path => ":rails_root/public/attach/:basename.:extension"
  validates_attachment_content_type :attach, content_type: "text/plain"
end

它的视图 show.html.erb :

<p>
  <strong>AFile:</strong>
  <%= @afile.name_file %>
</p>

<%= link_to 'Download', @afile.attach.url(:original, false) %> |
<%= link_to 'Edit', edit_afile_path(@afile) %> |
<%= link_to 'Back', afiles_path %>

我确实喜欢这样: File download using Paperclip 但它没有帮助。

但是当我点击下载时,出现错误: 没有路线匹配 [GET] "/public/attach/text.txt"

如何解决这个问题?为什么点击“下载”无法下载文件?

【问题讨论】:

  • 你写过下载方法吗?
  • @Nithin,不,我没有写下载方法
  • 尝试写一个,如果可行,作为答案发布;)
  • 如果他将文件放在公共目录中,他不需要“下载方法” - 如果您真正的意思是路由和控制器。

标签: ruby-on-rails download paperclip


【解决方案1】:

Rails 将 /public 目录放在服务器 Web 根目录中。因此,文件系统路径为/public/foo.txt 的文件将可以通过http://localhost:3000/foo.txt 访问,而不是http://localhost:3000/public/foo.txt

所以你需要更改附件的url选项:

class AFile < ActiveRecord::Base
  has_attached_file :attach,
  :url => "/attach/:basename.:extension",
  :path => ":rails_root/public/attach/:basename.:extension"
  validates_attachment_content_type :attach, content_type: "text/plain"
end

【讨论】:

  • 附言。单数形式是attachment - attach 是动词。我将类命名为AttachmentUploadhas_attached_file :fileAFile 在复数方面是一个非常糟糕的模型名称。
  • 已经有了很好的变化!现在我有 :url => "/attach/:basename.:extension" 并且错误 "no routes..." 消失了!现在,浏览器显示文件的内容。点击“下载”后下载的文件我应该写一个方法来下载并更改routes.rb?
  • 是的,您将创建一个路由和一个控制器。使用 send_file 将文件作为响应中的有效负载发送。
  • 谢谢你,你真的帮了我!
【解决方案2】:

我下载文件的解决方案是这样的:

<%= link_to 'Download', @afile.attach.url(:original),
    download: @afile.attach.url(:original)%>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2016-10-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多