Ruby on rails : send_file returns 一页满字节

Ruby on rails : send_file returns a page full of bytes

我只是想从控制器下载一个文件(为了管理授权),我得到的唯一结果是一个 充满字节的页面 。 我尝试在 production.rb 和 environment.rb 中设置不同的配置(取消注释 X-sendfile 等...),我也没有发现另一个类似的问题。

如果我从我的 MemberFile 模型中的 send_file 方法中删除 :path 和 :url 参数,它工作正常但显然文件是 public 而这不是我想要的.授权由控制器管理。

我希望得到与文件 public...

时发生的结果完全相同的结果

感谢您的帮助!

member_file.rb

class MemberFile < ActiveRecord::Base

  belongs_to :member

  validates :member_id, presence: true

  has_attached_file :uploaded_file,
                    :url => "/member_files/get/:id",
                    :path => "#{Rails.root}/app/assets/test_member_files/:member_id/:id/:basename.:extension"
  validates_attachment :uploaded_file, content_type: { content_type: ["image/jpeg", "image/gif", "image/png", "application/pdf"] }

  Paperclip.interpolates :member_id do |attachment, style|
    attachment.instance.member_id
  end

end

member_file_controller.rb

def show
    @member_file = MemberFile.find(params[:id])
    authorize! :upload_files, @member_file.member
    send_file @member_file.uploaded_file.path, :type => @member_file.uploaded_file_content_type
  end

routes.rb

get 'member_files/get/:id' => 'member_files#show'

下载link

<td><%= link_to f.uploaded_file_file_name, f.uploaded_file.url, action: "download" %></td>

(有我们没有 action: "download" 没有任何改变)

结果

Page full of bytes

编辑 1

当我刷新后面的页面时,下载开始了!任何想法 ? :/

请使用 send_data 代替 send_file

好吧,答案很简单:只需在 routes.rb 中更改 get in post 并添加 method: 'post' link...