我只是尝试从控制器下载文件(为了管理授权),我得到的唯一结果是页面充满字节。 我试着在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"
没有改变任何东西)
结果
编辑1
当我刷新后一页时,下载就会启动!任何的想法 ? :/
答案 0 :(得分:0)
嗯,答案很简单:在 routes.rb 的get
中更改post
,并在链接中添加method: 'post'
...
答案 1 :(得分:-1)
请使用send_data代替send_file