Pregunta

Necesito un consejo rápido sobre algo que parece realmente simple.Tengo algunas imágenes dentro de una carpeta privada y me gustaría mostrarlas dentro de mi Vista.

La única solución que encontré fue esta:

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

He leído eso :disposition => 'inline' no debería activar la descarga de la imagen y permitirme mostrarla dentro de mi Vista.El problema es que cada vez que disparo show acción, la descarga de imágenes se activa automáticamente y se descarga automáticamente.Ver para show La acción no se muestra.

¿Cómo puedo mostrar esa imagen dentro de mi Vista?Gracias.

¿Fue útil?

Solución

La forma en que lo hago, y no estoy diciendo que sea perfectamente perfectamente en el libro, es que haga una raíz de imágenes y una acción en el controlador para hacerlo.

Entonces, por ejemplo, en rutas.rb

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

en su controlador:

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

y en su vista

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

Aquí hay un ejemplo de trabajo, con menos parámetros en "send_file"

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

Otros consejos

Creo que el problema es type.De la documentación:

:type - specifies an HTTP content type

Por lo tanto, el tipo de contenido HTTP adecuado debe ser image/jpeg en lugar de image/jpg, como puede ver aquí .Prueba con:

:type => 'image/jpeg'

También puede enumerar todos los tipos disponibles que codifican Mime::EXTENSION_LOOKUP en una consola de rieles.

Ejemplo:

controlador

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

rutas

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

vistas

image_tag image_path('path_to_image')

Debería tener la vista Use una imagen_tag para mostrar en la vista.

Se planteó una pregunta similar aquí: Mostrando imágenes con CarrierWave en Rails 3.1 en una carpeta de tienda privada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top