Rails - 是否可以为外部图像提供本地URL?

时间:2012-03-30 15:11:59

标签: ruby-on-rails ruby ruby-on-rails-3

因为无法将文件上传到Heroku应用程序。

我正在使用Amazon S3存储服务器来存储图像。

问题只在于图片网址是亚马逊S3服务器。

我希望它是mydomain.com/myimage.png而不是s3.amazon.com/bucket/myimage.png

访问示例时,如何在亚马逊s3服务器上显示图像:mydomain.com/myimage.png

2 个答案:

答案 0 :(得分:7)

我的解决方案,我只使用png图像:

在路线中:

match "/images/vind/:style/:id/:basename.png" => "public#image_proxy"

在公共控制人员中:

def image_proxy
  image_url = "http://s3-eu-west-1.amazonaws.com/konkurrencerher#{request.path}"
  response.headers['Cache-Control'] = "public, max-age=#{84.hours.to_i}"
  response.headers['Content-Type'] = 'image/png'
  response.headers['Content-Disposition'] = 'inline'
  render :text => open(image_url, "rb").read,
end

答案 1 :(得分:3)

您可以创建一个机架中间件,在网址中查找模式(/ images / *或* .png),当匹配时,它将充当代理,从S3请求图像并提供内容收到它。

确保正确设置缓存标头,以便Heroku的反向代理将缓存它并快速提供。