如何从URL下载图像并在视图中显示

时间:2013-08-27 23:17:51

标签: ruby-on-rails ruby download temporary-files

我正在尝试下载图像并将其显示在rails中的视图中。

我想下载它的原因是因为网址包含一些我不太喜欢赠送的api-key。

我迄今为止尝试的解决方案如下:

#Model.rb file
def getUrlMethod
   someUrlToAPNGfile = "whatever.png"
   file = Tempfile.new(['imageprependname', '.png'], :encoding => "ascii-8bit")
   file.write(open(data).read)
   return "#{Rails.application.config.action_mailer.default_url_options[:host]}#{file.path}"
end
#This seems to be downloading the image just fine. However the url that is returned does not point to a legal place

正在开发中,我会获得图片的这个网址:localhost:3000/var/folders/18/94qgts592sq_yq45fnthpzxh0000gn/T/imageprependname20130827-97433-10esqxh.png

该图片链接并未指向任何有用的内容。

我对可能出错的理论是:

  1. 在用户可以请求之前删除临时文件
  2. 网址指向错误的地方
  3. 网址文件中的网址不是合法路由
  4. 我目前不知道有任何方法可以解决这些问题。有什么帮助吗?


    顺便说一句:我在显示之后不需要存储图片,因为它会不断地从源头改变。

2 个答案:

答案 0 :(得分:2)

我可以想到两个选择:

首先,将图像直接嵌入HTML文档中,参见 http://www.techerator.com/2011/12/how-to-embed-images-directly-into-your-html/ http://webcodertools.com/imagetobase64converter

其次,在HTML文档中,像往常一样编写图像标记:

<img src="/remote_images/show/whatever.png" alt="whatever" />

然后创建一个RemoteImages控制器来处理图像请求。在动作show中,图片将被下载并随send_data一起返回。

您不必使用这两个选项管理临时文件。

答案 1 :(得分:0)

您可以将文件保存在rails应用程序的公用文件夹中的任何位置。正确的路径类似于此#{Rails.root}/public/myimages/<image_name>.png,然后您可以使用类似此http://localhost:3000/myimages/<image_name>.png的网址引用它。希望这会有所帮助。