我需要一些看似非常简单的快速提示。我在私人文件夹中有一些图片,并希望在我的视图中显示它们。
我找到的唯一解决方案是:
def show
send_file 'some/image/url', :disposition => 'inline', :type => 'image/jpg', :x_sendfile => true
end
我已经读过:disposition => 'inline'
不应该触发图像下载并允许我在我的视图中显示它。问题是每次触发show
操作时,图像下载都会自动激活并自动下载。未显示show
操作的视图。
如何在我的视图中显示该图像?谢谢。
答案 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