通过回形针保存来自URL的图像
请给我build议一种方法来保存一个来自URL的图像回形针。
这是一个简单的方法:
require "open-uri" class User < ActiveRecord::Base has_attached_file :picture def picture_from_url(url) self.picture = open(url) end end
然后简单地:
user.picture_from_url "http://www.google.comhttp://img.dovov.comlogos/ps_logo2.png"
在回形针3.1.4中变得更加简单。
def picture_from_url(url) self.picture = URI.parse(url) end
这比open(url)好一点。 因为打开(url),你会得到“stringio.txt”作为文件名。 通过上面的内容,您将根据URL获取文件的正确名称。 即
self.picture = URI.parse("http://something.com/blah/avatar.png") self.picture_file_name # => "avatar.png" self.picture_content_type # => "image/png"
首先下载带有curb
gem的图像到TempFile
,然后简单地分配tempfile对象并保存你的模型。
直到我使用“打开”分析的URI,它才起作用。 一旦我添加“打开”它的工作!
def picture_from_url(url) self.picture = URI.parse(url).open end
我的回形针版本是4.2.1
打开之前,它不会检测到内容types的权利,因为它不是一个文件。 它会说image_content_type:“二进制/八位字节stream”,即使我用正确的内容types覆盖它,它不会工作。
由于这些都是旧的答案在这里是一个新的:
将图像远程URL添加到数据库中所需的控制器
$ rails generate migration AddImageRemoteUrlToYour_Controller image_remote_url:string $ rake db:migrate
编辑你的模型
attr_accessible :description, :image, :image_remote_url . . . def image_remote_url=(url_value) self.image = URI.parse(url_value) unless url_value.blank? super end
*在Rails4中,你必须在Controller中添加attr_accessible。
如果您允许其他人从url上传图片,请更新您的表单
<%= f.input :image_remote_url, label: "Enter a URL" %>
这是一个硬核的方法:
original_url = url.gsub(/\?.*$/, '') filename = original_url.gsub(/^.*\//, '') extension = File.extname(filename) temp_images = Magick::Image.from_blob open(url).read temp_images[0].write(url = "/tmp/#{Uuid.uuid}#{extension}") self.file = File.open(url)
Uuid.uuid只是做一些随机的ID。
这可能对你有帮助。 这里是使用远程URL中存在的回形针和图像的代码。
require 'rubygems' require 'open-uri' require 'paperclip' model.update_attribute(:photo,open(website_vehicle.image_url))
在模型中
class Model < ActiveRecord::Base has_attached_file :photo, :styles => { :small => "150x150>", :thumb => "75x75>" } end