Question

J'ai besoin d'un petit conseil sur quelque chose qui semble vraiment simple.J'ai quelques images dans un dossier privé et j'aimerais les afficher dans ma vue.

La seule solution que j'ai trouvée était la suivante :

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

j'ai lu ça :disposition => 'inline' ne devrait pas déclencher le téléchargement de l'image et me permettre de l'afficher dans ma vue.Le problème c'est qu'à chaque fois que je déclenche show action, le téléchargement de l’image est automatiquement activé et il est automatiquement téléchargé.Afficher pour show l’action n’est pas affichée.

Comment puis-je afficher cette image dans ma vue ?Merci.

Était-ce utile?

La solution

La façon dont je le fais, et je ne dis pas que c'est parfaitement conforme aux règles, est de créer une racine pour les images et une action dans le contrôleur pour la restituer.

Ainsi, par exemple, dans routes.rb

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

Dans votre contrôleur :

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

Et à votre avis

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

Voici un exemple fonctionnel, avec moins de paramètres sur "send_file"

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

Autres conseils

Je pense que le problème est type.À partir de la documentation :

:type - specifies an HTTP content type

Le type de contenu HTTP approprié doit donc être image/jpeg au lieu de image/jpg, comme tu peux vois ici.Essayez avec :

:type => 'image/jpeg'

Vous pouvez également lister tous les types de codage disponibles Mime::EXTENSION_LOOKUP dans une console de rails.

Exemple:

Manette

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

Itinéraires

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

Vues

image_tag image_path('path_to_image')

Vous devrez faire en sorte que la vue utilise un image_tag pour s'afficher sur la vue.

Une question similaire a été soulevée ici : Affichage des images avec Carrierwave dans Rails 3.1 dans un dossier de magasin privé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top