【问题标题】:CarrierWave how to store file at given urlCarrierWave 如何将文件存储在给定的 url
【发布时间】:2011-11-12 11:29:33
【问题描述】:

通过典型的 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

也没有错误。我一直在网上四处寻找,但未能找到解决方案。

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    我在试图弄清楚如何让store! 使用本地文件路径时遇到了很多麻烦。原来store!实际上是把文件作为参数,而不是字符串。

    对于网址,您需要先require 'open-uri',然后打开文件/网址。这样的事情应该可以工作:

    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

    【讨论】:

      【解决方案2】:

      实际上,如果您使用活动记录/模型助手,您可以使用内置的remote_{attribute}_url 属性来执行此操作(有关详细信息,请参阅 CarrierWave railscast)。然而,我在源代码中挖掘了一下,看看它是如何工作的,看起来即使你不是,你也应该能够使用以下内容:

      uploader = ImageUploader.new
      uploader.download! some_remote_url
      uploader.store!
      

      试一试。

      【讨论】:

      • 这似乎是一种更安全的解决方案。
      • 这个最好,因为用这种方法我们保存文件扩展名。
      【解决方案3】:

      用户注册后在控制器中(假设您的用户图像字段简称为“图像”)

      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 docs 和一些搜索,我认为这是最好的方法。

      享受吧!

      【讨论】:

      • 这很好用。谢谢!我花了很多时间来找出更复杂的方法。
      • 很高兴我能帮上忙!从社交或任何服务 api 导入时,这是一种非常有用的方法。
      • 我想在回调 before_create 中使用它,因为我在没有控制器的地方使用了 devise,但它不起作用。
      • @aisensiy,我希望我能正确理解您的问题 - 您可以设置地址,但为了实际上传图像,您必须先将记录保存到数据库。尝试创建访客模型,并在创建用户后重新关联或重新创建图像。希望这会引导您朝着正确的方向前进:railscasts.com/episodes/393-guest-user-record
      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2017-09-26
      相关资源
      最近更新 更多