Frage

Ich brauche einen kurzen Tipp für etwas, das wirklich einfach erscheint.Ich habe einige Bilder in einem privaten Ordner und möchte sie in meiner Ansicht anzeigen.

Die einzige Lösung, die ich gefunden habe, war diese:

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

Das habe ich gelesen :disposition => 'inline' sollte keinen Bild-Download auslösen und es mir ermöglichen, es in meiner Ansicht anzuzeigen.Das Problem ist, dass ich jedes Mal auslöse show Aktion wird der Bild-Download automatisch aktiviert und automatisch heruntergeladen.Ansicht für show Aktion wird nicht angezeigt.

Wie kann ich dieses Bild in meiner Ansicht anzeigen?Danke schön.

War es hilfreich?

Lösung

Die Art und Weise, wie ich es mache, und ich behaupte nicht, dass es perfekt ist, besteht darin, dass ich ein Stammverzeichnis für Bilder und eine Aktion im Controller erstelle, um es zu rendern.

So zum Beispiel in „routes.rb“.

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

In Ihrem 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

Und aus Ihrer Sicht

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

Hier ist ein funktionierendes Beispiel mit weniger Parametern für „send_file“

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

Andere Tipps

Ich denke, das Problem ist type.Aus der Dokumentation:

:type - specifies an HTTP content type

Es sollte also der richtige HTTP-Inhaltstyp sein image/jpeg anstatt image/jpg, wie du kannst siehe hier.Versuche es mit:

:type => 'image/jpeg'

Sie können auch alle verfügbaren Codierungstypen auflisten Mime::EXTENSION_LOOKUP in eine Schienenkonsole.

Beispiel:

Regler

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

Routen

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

Ansichten

image_tag image_path('path_to_image')

Sie müssten dafür sorgen, dass die Ansicht ein image_tag verwendet, um in der Ansicht angezeigt zu werden.

Eine ähnliche Frage wurde hier aufgeworfen: Bilder mit Carrierwave in Rails 3.1 werden in einem privaten Store-Ordner angezeigt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top