Pergunta

Preciso de uma dica rápida sobre algo que parece muito simples.Tenho algumas fotos dentro de uma pasta privada e gostaria de exibi-las dentro do meu View.

A única solução que encontrei foi esta:

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

eu li isso :disposition => 'inline' não deve acionar o download da imagem e permitir que eu a exiba dentro do meu View.O problema é que cada vez que eu aciono show ação, o download da imagem é ativado automaticamente e é baixado automaticamente.Ver para show a ação não é exibida.

Como posso exibir essa imagem dentro da minha View?Obrigado.

Foi útil?

Solução

A maneira como faço isso, e não estou dizendo que seja perfeitamente conforme as regras, é criar uma raiz para as imagens e uma ação no controlador para renderizá-las.

Então, por exemplo, em rotas.rb

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

No seu 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

E na sua opinião

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

Aqui está um exemplo prático, com menos parâmetros em "send_file"

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

Outras dicas

Eu acho que o problema é type.Da documentação:

:type - specifies an HTTP content type

Portanto, o tipo de conteúdo HTTP adequado deve ser image/jpeg em vez de image/jpg, como você puder Veja aqui.Experimente com:

:type => 'image/jpeg'

Você também pode listar todos os tipos de codificação disponíveis Mime::EXTENSION_LOOKUP em um console Rails.

Exemplo:

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

Rotas

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

Visualizações

image_tag image_path('path_to_image')

Você precisaria que a visualização usasse um image_tag para exibir na visualização.

Questão semelhante foi levantada aqui: Mostrando imagens com carrierwave no Rails 3.1 em uma pasta de armazenamento particular

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top