Quindi questo dovrebbe essere abbastanza semplice, ma non riesco a farlo funzionare.Rendering di un'immagine
Ho un metodo controller che trova un'immagine basata su una query, quindi l'output viene memorizzato nella cache. L'immagine potrebbe essere remota (flickr, immagini google, ecc.) O potrebbe essere locale. Indipendentemente dalla fonte, ho solo bisogno di prendere il contenuto del file immagine e passarlo all'utente. In sostanza, un proxy. Passare attraverso le immagini remote sembra funzionare bene, ma passare attraverso le immagini locali mi dà un:
invalid byte sequence in UTF-8
Quindi ecco cosa ho ottenuto. Spero che qualcuno possa risolvere il problema o guidarmi in una direzione migliore con il mio codice.
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
I file remoti funzionano correttamente, i file locali no.
bonus a tutti coloro che possono aiutare a risolvere questo altro problema:
- ho bisogno di impostare il tipo di contenuto corretto. Gli URL delle immagini remote non mi dicono il tipo di immagine, ho solo un URL e talvolta l'url non contiene un'estensione. Quindi ho scelto jpeg perché sembra funzionare a prescindere dal tipo di immagine che mi è stato inviato.
Grazie!
Ottima risposta, ha funzionato perfettamente. –