这应该很简单,但是我无法让它工作。
我有一个控制器方法,根据查询找到一张图片,然后将输出缓存。 图片可能是远程的(flickr,google images等),也可能是本地的。 无论来源如何,我只需要获取图像文件内容,并将其传递给用户。 实质上,这就是一个代理。 似乎通过传递远程图片可以正常工作,但是通过传递本地图片会出现:
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
远程文件可以正常工作,本地文件无法工作。
奖励任何能够帮助解决另一个问题的人:
- 我需要设置正确的内容类型。 远程图像 URL 不告诉我图像类型,我只收到一个 URL,有时该 URL 不包含扩展名。 因此,我选择了 jpeg,因为它似乎可以在发送给我的任何图像类型中正常工作。
谢谢!