CarrierWave如何在给定的URL存储文件
我通过典型的ORM设置使CarrierWave正常工作并通过表单上传。 我想弄清楚如何在表单提交上下文之外使用CarrierWave。 例如,当用户注册时,我想抓住他们的gravatar并将其存储在CarrierWave中。 这是我拥有的,它不起作用:
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" uploader = ImageUploader.new uploader.store! gravatar_url
也没有错误。 我一直在寻找网络,但一直无法找到解决方案。
我在弄清楚如何获得store!
方面遇到了很多麻烦store!
使用本地文件路径。 事实certificate, store!
实际上将文件作为参数,而不是字符串。
对于URL,您需要首先require 'open-uri'
,然后打开文件/ url。 像这样的东西应该工作:
require 'open-uri' gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" tempfile = open(gravatar_url) uploader = ImageUploader.new uploader.store! tempfile
这同样适用于文件路径,但在这种情况下您不必要求open-uri
。
在用户注册后在控制器中(假设您的用户图像字段简称为“图像”)
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" @user.remote_image_url = gravatar_url @user.save
我认为这是根据carrierwave文档和一些搜索的最佳方式。
请享用!
实际上,如果使用活动记录/模型帮助程序,则可以使用内置的remote_{attribute}_url
属性执行此操作(有关详细信息,请参阅CarrierWave railscast)。 但是,我在源代码中挖了一下,看看这实际上是如何工作的,看起来即使你不是,你也应该能够使用以下内容:
uploader = ImageUploader.new uploader.download! some_remote_url uploader.store!
试试看。