Ruby on rails:send_file返回一个满字节的页面

时间:2016-12-13 13:50:45

标签: ruby-on-rails ruby file download paperclip

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

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

我希望与文件公开时发生的结果完全相同......

感谢您的帮助!

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'

下载链接

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

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

结果

Page full of bytes

编辑1

当我刷新后一页时,下载就会启动!任何的想法 ? :/

2 个答案:

答案 0 :(得分:0)

嗯,答案很简单:在 routes.rb get中更改post,并在链接中添加method: 'post' ...

答案 1 :(得分:-1)

请使用send_data代替send_file