Gitlab(rails).svg文件的"原始"文件mime类型是'text/plain'.可以配置输出为'image/svg + xml'吗?

101*_*ris 7 ruby-on-rails gitlab

我已经在本地服务器上安装了Gitlab进行评估,对我来说一个关键功能是将svg文件显示为wiki中的图像.如果我将文件拖到wiki编辑器中,我就可以工作了,这会生成一个像这样的URL:

在维基降价:

![my svg diagram](http://server/my-group/my-project/uploads/90cdd5d76a05957ab7cf8854c55a38b8/my-diagram.svg)
Run Code Online (Sandbox Code Playgroud)

结果在页面html:

<img src="http://server/my-group/my-project/uploads/90cdd5d76a05957ab7cf8854c55a38b8/my-diagram.svg" alt="my svg diagram">
Run Code Online (Sandbox Code Playgroud)

为了让它工作,我不得不编辑/opt/gitlab/embedded/service/gitlab-rails/config/initializers/mime_types.rb添加行:

Mime::Type.register_alias "image/svg+xml", :svg
Run Code Online (Sandbox Code Playgroud)

如果我想将svg文件拖入wiki并将其存储在项目的"上传"部分中,那就太棒了,但是,我真正想做的是从git存储库中显示一个svg图像.(例如,当svg图改变时,我不必在wiki中搜索它,它只会从主分支中获取它)

我发现,例如,这是一个repo文件的链接:

http://server/my-group/my-project/raw/master/docsfolder/my-drawing.svg
Run Code Online (Sandbox Code Playgroud)

但是,mime类型表示用于以text/plain这种方式引用的svg文件,并且具有该图像的图像src将不会显示.有办法制作它们image/svg+xml吗?似乎mime_types.rb配置文件不会影响这个"原始"输出.或者是否有另一种方法可以链接到repo文件并获取指定的mime类型?

我也尝试<object type="image/svg+xml" data="...<embed type="image/svg+xml" src="甚至iframe中,但这些都不工作,要么.

注意:它确实适用于repo的jpg图像,而不是svg图像.

101*_*ris 5

找到了.似乎内容类型是在raw_controller.rb文件中的ruby代码中设置的.所以我编辑

/opt/gitlab/embedded/service/gitlab-rails/app/controllers/projects/raw_controller.rb
Run Code Online (Sandbox Code Playgroud)

改变这个:

  def get_blob_type
    if @blob.text?
      'text/plain; charset=utf-8'
    else
      'application/octet-stream'
    end
  end
Run Code Online (Sandbox Code Playgroud)

这样的事情:

  def get_blob_type
    extn = File.extname(@blob.name).downcase
    if @blob.text?
      if extn == ".svg"
        'image/svg+xml'
      else 
        'text/plain; charset=utf-8'
      end
    else
      case extn
        when ".jpg", ".jpeg"
          'image/jpeg'
        when ".gif"
          'image/gif'
        when ".png"
          'image/png'
        when ".bmp"
          'image/bmp'
        when ".tiff"
           'image/tiff'
        else
          'application/octet-stream'
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后 sudo gitlab-ctrl restart

现在在我的降价中,如果我这样做:

![my-diagram](http://server/my-group/my-project/raw/master/docsfolder/my-drawing.svg)
Run Code Online (Sandbox Code Playgroud)

有用!

我之前从未使用过红宝石,所以也许有更好的方法,但到目前为止对我有用.