2012-08-02 25 views
0

我打我的应用程序,其中阿贾克斯移动Safari浏览器停止接收与Content-Disposition:attachment集内容处置基于在轨用户代理(解决方法适用于iOS的bug)

响应我要继续工作后this错误发送处置:附件到桌面浏览器和非iOS移动设备,同时切换到处置:在iOS上内联。我需要在几个不同的控制器操作中执行此操作。

除了把这些类型的街区都放在这个地方之外,是否有一种优雅的方式来做到这一点?

if request.env['HTTP_USER_AGENT'] =~ /iPad/ 
    disposition = :inline 
else 
    disposition = :attachment 
end 

回答

2

只需在应用程序控制器中创建一个before_filter,它将一劳永逸地设置它!

class ApplicationController < ActionController::Base 
    before_filter :set_content_disposition 

    def set_content_disposition 
    if request.env['HTTP_USER_AGENT'] =~ /iPad/ 
     response.headers['Content-Disposition'] = 'inline' 
    elsif params[:format].in?(['pdf', 'other_format', 'other_format2']) 
     response.headers['Content-Disposition'] = 'attachment' 
    end 
    end 
    #Rest of application controller code ... 
end 
+0

嗯,我不能设置:*所有*请求附件,因为然后浏览器将尝试下载每一页。有没有办法为给定格式的所有响应设置标题,这样每次我执行'respond_to ... format.pdf'时都会设置标题? – spike 2012-08-02 17:01:29

+0

编辑我的答案,这是否工作? – 2012-08-02 17:04:18

+0

似乎是一种合理的方法。 – spike 2012-08-02 17:08:17

相关问题