Ruby on rails RubyonRails:send_文件返回一个充满字节的页面

Ruby on rails RubyonRails:send_文件返回一个充满字节的页面,ruby-on-rails,ruby,file,download,paperclip,Ruby On Rails,Ruby,File,Download,Paperclip,我只是尝试从控制器下载一个文件(为了管理授权),我得到的唯一结果是一个充满字节的页面。 我试图在production.rb和environment.rb中设置不同的配置(取消注释X-sendfile等),但也没有发现其他类似的问题 如果我从MemberFile模型中的send_file方法中删除:path和:url参数,它可以正常工作,但显然文件是公共的,这不是我想要的。授权由控制器管理 我希望得到与文件公开时完全相同的结果 谢谢你的帮助 成员文件.rb class MemberFile <

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

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

我希望得到与文件公开时完全相同的结果

谢谢你的帮助

成员文件.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
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
get 'member_files/get/:id' => 'member_files#show'
routes.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
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
get 'member_files/get/:id' => 'member_files#show'
下载链接

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

(使用我们的无
操作:“下载”
不会改变任何内容)

结果

编辑1


当我刷新后一页时,下载就启动了!有什么想法吗/

请使用send_数据代替send_文件

好吧,答案很简单:只需在
post
路由中更改
get
。rb
并在链接中添加
方法:'post'
Ruby没有
send_文件
方法,请更正标题。看起来需要mimetype。我更正了标题。在send_文件中,我给出了关于mimetype的信息:“image/jpeg”、“application/pdf”或其他什么。。。可能浏览器没有看到此字段,或者我在代码中遗漏了一些内容:/I发送_数据仍然存在相同的问题:
@filepath=@member_file.uploaded_file.path file.path file.open(@filepath,'r')do | f | send_data f.read,:filename=>“myfile.jpeg”,:type=>@member_file.uploaded_file_content_type,:disposition=>“附件”结束