Ruby on rails 渲染图像
所以这应该很容易,但我不能让它工作 我有一个控制器方法,它根据查询查找图像,然后缓存输出。图像可以是远程的(flickr、谷歌图像等),也可以是本地的。不管源代码是什么,我只需要获取图像文件的内容,并将其传递给用户。本质上,这是一种代理。通过远程图像似乎可以正常工作,但通过本地图像给了我一个:Ruby on rails 渲染图像,ruby-on-rails,image,proxy,Ruby On Rails,Image,Proxy,所以这应该很容易,但我不能让它工作 我有一个控制器方法,它根据查询查找图像,然后缓存输出。图像可以是远程的(flickr、谷歌图像等),也可以是本地的。不管源代码是什么,我只需要获取图像文件的内容,并将其传递给用户。本质上,这是一种代理。通过远程图像似乎可以正常工作,但通过本地图像给了我一个: invalid byte sequence in UTF-8 这就是我得到的。我希望有人能解决这个问题,或者用我的代码引导我朝着更好的方向前进 def image_proxy query = par
invalid byte sequence in UTF-8
这就是我得到的。我希望有人能解决这个问题,或者用我的代码引导我朝着更好的方向前进
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
远程文件工作正常,本地文件不工作
对任何能够帮助解决其他问题的人的奖励:
谢谢 尝试使用
render:text=>open(image\u url,“rb”).read
,它告诉Ruby它打开的文件是二进制文件,不要尝试将其作为文本读取
编辑
对于附加问题,您可以读取前几个字节并查看它们包含的内容。
PNG总是以十六进制字节值89 50 4E 47 0D 0A 1A 0A(或十进制值137 80 78 71 13 10 26 10)开始
Wikipedia有一个你可以看的网站。只需创建一种读取前几个字节的方法,并将其与之进行比较。什么版本的Rails?对于Rails 3,您应该查看添加的。发送_数据是发送二进制数据的正确方式。如果图像是本地的,并且您的web服务器支持它,那么您可以使用send_file,该文件在用户下载图像时不会阻止rails实例。是的,
send_data
是您想要的,而不是render
。