【问题标题】:Rendering file with MIME Type in rails在 rails 中使用 MIME 类型渲染文件
【发布时间】:2010-09-22 22:26:43
【问题描述】:

代码如下:

render :file => @somedir + "/blah.xml"

...但是当我签入 FireBug 时,生成的 MIME 类型是 text/html。在这种情况下如何指定 MIME 类型?

【问题讨论】:

    标签: ruby-on-rails ruby render mime-types


    【解决方案1】:

    看看here。基本上你需要使用渲染:xml => blah.to_xml

    【讨论】:

    • 谢谢,但请求没有扩展名,我认为responds_to使用扩展名来确定格式。我错了吗?
    【解决方案2】:

    其实有两种方法可以设置 content-type(我想这就是你所说的 mime-type 的意思)。如果它适用于您的 Rails 版本,您应该使用第二个选项。

    class FileController < ApplicationController
    
      def index
        filename = 'some.xml'
    
        extname = File.extname(filename)[1..-1]
        mime_type = Mime::Type.lookup_by_extension(extname)
        content_type = mime_type.to_s unless mime_type.nil?
    
        # 1
        #headers['Content-Type'] = content_type
        #render :file => filename
    
        # 2
        render :file => filename, :content_type => content_type
      end
    
    end
    

    希望这会有所帮助!

    【讨论】:

    • 从文件名/路径MIME::Types.type_for("some.xml").first.content_type获取mime类型的另一种方法
    【解决方案3】:

    怎么样

    headers["Content-Type"] = "text/xml"
    

    ?希望对您有所帮助。

    【讨论】:

      【解决方案4】:
      render :file => @somedir + "/blah.xml", :content_type => Mime::XML
      

      【讨论】:

        【解决方案5】:

        根据http://api.rubyonrails.org/classes/Mime/Type.html,您可以这样指定:

        render file: @somedir + "/blah.xml", mime_type: Mime::Type.lookup("text/xml")  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-29
          • 2013-06-15
          • 2012-04-19
          • 2012-01-31
          • 2015-12-10
          • 2011-01-25
          • 1970-01-01
          • 2023-03-05
          相关资源
          最近更新 更多