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