Así que esto debería ser bastante fácil, pero no puedo hacer que funcione.Renderizar una imagen
Tengo un método de controlador que encuentra una imagen basada en una consulta, luego la salida se almacena en caché. La imagen podría ser remota (flickr, google images, etc.) o podría ser local. Independientemente de la fuente, solo necesito tomar los contenidos del archivo de imagen y pasarlo al usuario. En esencia, un proxy. Pasar por imágenes remotas parece funcionar bien, pero al pasar a través de imágenes locales me da una:
invalid byte sequence in UTF-8
Así que esto es lo que obtuve. Espero que alguien pueda resolver el problema o guiarme en una mejor dirección con mi código.
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
archivos remotos funcionan bien, los archivos locales no lo hacen.
bonificación a cualquier persona que pueda ayudar a resolver este otro tema:
- necesito para establecer el tipo de contenido adecuado. Las URL de imagen remotas no me dicen el tipo de imagen, solo obtengo una url y, a veces, la url no contiene una extensión. Así que elegí jpeg porque parece funcionar independientemente del tipo de imagen que me envíe.
¡Gracias!
Gran respuesta, funcionó a la perfección. –