如何在View中的私人文件夹中显示图像?

时间:2014-02-26 23:59:18

标签: ruby-on-rails ruby-on-rails-4 sendfile

我需要一些看似非常简单的快速提示。我在私人文件夹中有一些图片,并希望在我的视图中显示它们。

我找到的唯一解决方案是:

def show
    send_file 'some/image/url', :disposition => 'inline', :type => 'image/jpg', :x_sendfile => true
end

我已经读过:disposition => 'inline'不应该触发图像下载并允许我在我的视图中显示它。问题是每次触发show操作时,图像下载都会自动激活并自动下载。未显示show操作的视图。

如何在我的视图中显示该图像?谢谢。

3 个答案:

答案 0 :(得分:1)

我认为问题是type。来自文档:

:type - specifies an HTTP content type

因此,正确的HTTP内容类型应为image/jpeg而不是image/jpg,因为您可以see here。试试:

:type => 'image/jpeg'

您还可以将编码Mime::EXTENSION_LOOKUP的所有可用类型列入rails控制台。

示例:

<强>控制器

class ImagesController < ApplicationController
  def show_image
    image_path = File.join(Rails.root, params[:path]) # or similar
    send_file image_path, disposition: 'inline', type: 'image/jpeg', x_sendfile: true
  end
end

<强>路线

get '/image/:path', to: 'images#show_image', as: :image

<强>视图

image_tag image_path('path_to_image')

答案 1 :(得分:1)

我这样做的方式,并不是说这本书的完美之处,是我为图像制作了一个根,并在控制器中创建了一个动作来渲染它。

因此,例如,在routes.rb

match '/images/:image', to: "your_controller#showpic", via: "get", as: :renderpic

在您的控制器中:

def showpic
    send_file "some/path/#{params[:image]}.jpg", :disposition => 'inline', 
              :type => 'image/jpg', :x_sendfile => true # .jpg will pass as format
end

def show
end

在你看来

<img src="<%= renderpic_path(your image) %>">

这是一个工作示例,“send_file”

上的参数较少
def showpic
    photopath = "images/users/#{params[:image]}.jpg"
    send_file "#{photopath}", :disposition => 'inline'
end

答案 2 :(得分:0)

您需要让视图使用image_tag显示在视图上。

此处提出了类似的问题:Showing images with carrierwave in rails 3.1 in a private store folder