1

我需要一个看起来很简单的快速提示。我在私人文件夹中有一些图片,想在我的视图中显示它们。

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

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

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

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

4

3 回答 3

2

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

因此,例如,在 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
于 2014-02-27T00:21:41.280 回答
1

我认为问题是type。从文档:

:type - specifies an HTTP content type

因此,正确的 HTTP 内容类型应该是image/jpegimage/jpg正如您在此处看到的那样。尝试:

: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')
于 2014-02-27T00:19:46.260 回答
0

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

此处提出了类似的问题:在私人商店文件夹中的 rails 3.1 中显示带有载波的图像

于 2014-02-27T00:18:37.603 回答