Mr_*_*zle 5 sendfile ruby-on-rails-3
我有这张优惠券表格
<%form_for(:download,:download,:url=>{:controller=>"coupons",:action=>"verifycoupon"},:remote=>true) do |f| %>
<%=text_field :download,:code%>
<%=f.submit "verify"%>
<%end%>
Run Code Online (Sandbox Code Playgroud)
并且在验证控制器动作上的代码后,我有一个确认:
render :update do |page|
page.alert "OK"
end
Run Code Online (Sandbox Code Playgroud)
现在我想通过send_file指令将文件发送到浏览器,但似乎没有任何事情发生
send_file("/path/to/my/file.extension")
Run Code Online (Sandbox Code Playgroud)
在日志中我可以看到
"Sent file /path/to/my/file.extension (0.1ms)"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的东西
render :update do |page|
page.send_file("/path/to/my/file.extension")
end
Run Code Online (Sandbox Code Playgroud)
#### Update #######
Run Code Online (Sandbox Code Playgroud)
我的Controller的动作看起来像
def verifycoupon
code = Code.find(params[:download][:code])
if code
if code.is_active?
render :update do |page|
page.alert "ok"
end
send_file("/path/to/my/file.extension")
else
render :update do |page|
page.alert "this code has already been used"
end
end
else
render :update do |page|
page.alert "Code does't exist"
end
end
end
Run Code Online (Sandbox Code Playgroud)
小智 7
我有同样的问题,很好.
在我看来,我有一个link_to标签remote: true.
该链接旨在生成PDF的操作.PDF已生成(使用prawn和thinreports)并已发送,但下载对话框未弹出.
所以我删除remote: true并添加了一个target: '_self',所以它最终像这样(我使用haml)
!= link_to image_tag( 'print.png' ) + (I18n.t :buttons)[:comments][:print],
customer_comment_path(@address_book),
{ target: '_self' }
Run Code Online (Sandbox Code Playgroud)
它运作得很好.
我没有必要执行上面提到的" Ajax请求 - >服务器 - >响应 - >重定向 - >客户端 - >请求下载 - > ... ".
我听说解决方案是将重定向发送到端点,其中 send_file 从 Ajax 返回。
因此,Ajax 请求 -> 服务器 -> 响应 -> 重定向 -> 客户端 -> 请求下载 -> 您停留在同一页面上。
def show
# if javascript, then redirect to file_sender
end
def file_sender
# Send file from here.
end
Run Code Online (Sandbox Code Playgroud)
请参阅此处http://anaphoral.blogspot.com/2009/03/sendfile-or-senddata-in-linktoremote.html