Rendu d'une image

Donc, cela devrait être assez facile, mais je ne peux pas le faire fonctionner.

J'ai un contrôleur de méthode qui trouve une image basée sur une requête, puis la sortie de mise en cache. L'image pourrait être à distance (flickr, google images, etc) ou il pourrait être local. Quelle que soit la source, j'ai juste besoin de prendre l'image le contenu du fichier, et le passer à travers à l'utilisateur. En essence, un proxy. En passant à travers des images à distance semble bien fonctionner, mais en passant à travers les images me donne:

invalid byte sequence in UTF-8

Voici donc ce que j'ai. J'espère que quelqu'un pourra résoudre le problème ou me guider dans une meilleure direction avec mon code.

def image_proxy
  query = params[:query]
  image_url = get_image_url(query) # returns an absolute local file path or a URL

  response.headers['Cache-Control'] = "public, max-age=#{12.hours.to_i}"
  response.headers['Content-Type'] = 'image/jpeg'
  response.headers['Content-Disposition'] = 'inline'
  render :text => open(image_url).read
end

À distance des fichiers fonctionnent correctement, les fichiers locaux ne pas.

Bonus à toute personne qui peut aider à résoudre cet autre problème:

  1. J'ai besoin de régler le bon type de contenu. Distance de l'image urls ne me dites pas le type d'image, je viens d'obtenir une url et parfois l'url ne contient pas une extension. Donc j'ai choisi jpeg, car il semble fonctionner quel que soit le type d'image qui me sont envoyés.

Merci!

InformationsquelleAutor Binary Logic | 2011-02-27