Domanda

Ho bisogno di un consiglio veloce su qualcosa che sembra davvero semplice.Ho alcune immagini nella cartella privata e vorrei visualizzarle nella mia vista.

L'unica soluzione che ho trovato è stata questa:

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

L'ho letto :disposition => 'inline' non dovrebbe attivare il download dell'immagine e consentirmi di visualizzarla all'interno della mia vista.Il problema è che ogni volta che mi innesco show azione, il download dell'immagine viene attivato automaticamente e viene scaricato automaticamente.Visualizza per show l'azione non viene visualizzata.

Come posso visualizzare quell'immagine all'interno della mia vista?Grazie.

È stato utile?

Soluzione

Il modo in cui lo faccio, e non sto dicendo che è perfettamente dal libro, è che faccio una radice per le immagini e un'azione nel controller per renderla.

Quindi, ad esempio, in routine.rb

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

Nel tuo controller:

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 in vostra vista

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

Ecco un esempio di funzionamento, con meno parametri su "SEND_FILE"

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

Altri suggerimenti

Penso che il problema sia type.Dalla documentazione:

:type - specifies an HTTP content type

Quindi dovrebbe essere il tipo di contenuto HTTP corretto image/jpeg invece di image/jpg, come puoi Vedere qui.Prova con:

:type => 'image/jpeg'

È inoltre possibile elencare tutti i tipi di codifica disponibili Mime::EXTENSION_LOOKUP in una console con binari.

Esempio:

Controllore

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

Itinerari

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

Visualizzazioni

image_tag image_path('path_to_image')

È necessario disporre della vista utilizzare un'immagine_tag da visualizzare sulla vista.

Domanda simile è stata sollevata qui: Mostrando immagini con Carrierwave in Rails 3.1 in una cartella del negozio privato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top