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...
我只是想从控制器下载一个文件(为了管理授权),我得到的唯一结果是一个 充满字节的页面 。 我尝试在 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...