这是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 %>
感谢任何帮助,谢谢!
答案 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_type
和original_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