ruby on rails-如何直接更新模特的头像/照片



这是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 %>

感谢您的帮助!

从您到上面Canvas2Image的链接来看,您似乎正在尝试处理Base64编码的图像(如data:image/octet-stream;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wB)。

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

我发布了一个要点,其中包含我在一个项目中用来实现这一点的代码。https://gist.github.com/1012107.

为了执行类似的操作,您需要删除Canvas2ImageURI data:image/octet-stream;base64,的开头部分,并使用剩余的Base64代码作为image_data。您需要一种方法来提供或处理内容类型和文件名。

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

您可以简单地保存URL并将其用作页面上的图像源。我知道这并不总是一个选择,你无法控制图像的可用性。

否则,您可以使用nethttp和curl等一些实用程序来下载图像。如果你认为你想走这条路,那么你也可以考虑使用延迟作业或类似的后台进程下载图像。这样,如果图像下载速度较慢,用户界面就不会挂起。

如果您想使用用户的电子邮件地址获取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))%>

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

此链接可能是您要查找的

然而,如果你还没有对回形针做太多的工作,我建议你换成CarrierWave。同样的事情是用两行代码完成的:

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

相关内容

  • 没有找到相关文章

最新更新