如何直接更新模特的头像/照片?

时间:2011-06-07 11:31:27

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

这是rails 3.0.x.我只是想知道如何在不提示用户从他/她的系统上传的情况下直接更新模特照片/头像的属性?

我正在使用Paperclip将照片附加到模特身上;它具有扩展名,以便用户可以使用URL上传照片。这很有效。

现在,我正在查看Canvas2Image,它会返回画布的图像,以便用户可以下载它们。

我想知道如何使用Canvas2Image返回的URL,以便我可以直接更新当前模型的照片?

目前,我有这个表单提示用户更新当前模特的头像/照片:

<% form_for(@prototype,
            :url=>{:controller=>"prototypes",
            :action=>"update"}, 
            :html => { :multipart => true }) do |f| %>

    <%= f.file_field :avatar %><br><br>
    <%= f.text_field :image_url %><br><br>
    <%= submit_tag   "Save Prototype" %>

<% end %>

感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

如果您想使用用户的电子邮件地址获取gravatar,可以使用以下代码段。

帮帮人:

def avatar_url(user)    
 gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
 return "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"         
end

在您看来:

<%= link_to(image_tag(avatar_url(user)), user_path(user))%>

就是这样!您无需要求用户在您的系统中上传照片。它将显示他的重头帐户的照片。请告诉我它是否能解决您的问题。

答案 1 :(得分:1)

从你上面的Canvas2Image链接看,我觉得你正在尝试处理Base64编码的图像(比如data:image/octet-stream;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wB)。

Paperclip需要一个Tempfile对象,它是在您上传图像时在幕后创建的。可以使用Tempfile对象伪造StringIO并添加content_typeoriginal_filename实例方法。

我在我的一个项目中发布了一个我用来完成此操作的代码的要点。 https://gist.github.com/1012107

为了做类似的事情,您需要删除Canvas2Image URI data:image/octet-stream;base64,的开头部分,并使用剩余的Base64代码作为image_data。您需要一种方法来提供或解决内容类型和文件名。

如果您只想使用http://example.com/image.jpg这样的普通网址,那么您有几个可用选项。

您只需保存网址并将其用作网页上的图片来源即可。我知道这并不总是一个选项,你无法控制图像的可用性。

否则,您可以使用几个实用程序(如net / http和curl)来下载图像。如果您认为您想要使用此路线,那么您可能还会考虑使用延迟作业或类似的后台处理来下载图像。这样,如果图像下载速度很慢,您的UI就不会挂起。

答案 2 :(得分:1)

This link可能就是你要找的东西

但是,如果你还没有完成回形针的工作,我建议你换掉CarrierWave。 使用两行代码完成同样的事情:

@prototype.image_remote_url = canvas2image_url #you should change this
@prototype.save