【问题标题】:paperclip renaming stringio.txt using instance_write回形针使用 instance_write 重命名 stringio.txt
【发布时间】:2012-12-22 11:44:38
【问题描述】:

我正在使用 omniauth-facebook 并尝试使用回形针显示个人资料图片。这是我用来获取图片到我的用户模型的代码

def picture_from_url(url)
    self.profile_pic =open(url)
end

但是,它始终保存为 stringio.txt。所以搜索这个行为我发现回形针允许回调所以我在用户模型中编写了以下方法来重命名文件名

def rename_profile_pic
    self.profile_pic.instance_write :filename, "#{self.username}.jpg"
end 

并将其传递给回调

before_post_process :rename_profile_pic

但这似乎没有帮助。

有什么想法可以解决这个问题吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    如果您还没有找到解决方案:

    data = StringIO.new(file_data)
    data.class.class_eval { attr_accessor :original_filename, :content_type }
    
    data.content_type = content_type
    data.original_filename = file_name
    
    object.attachment = data
    

    【讨论】:

    • 通过将此答案与this one 结合起来,我得到了一切正常工作。
    【解决方案2】:

    使用以下方法将您的 stringio.txt 转换为文件:

    file = StringIO.new(obj)
    file.original_filename = "#{self.username}.jpg"
    

    然后将您的文件分配给profile_pic

    【讨论】:

    • 谢谢,但这并没有帮助,因为 open() 已经提供了一个 StringIO 对象,并且在 StringIO 上没有一个名为 original_filename 的方法。虽然我发现了问题并修复了它。它是 :file_name 而不是 :filename self.profile_pic.instance_write :file_name, "#{self.username}.jpg"
    【解决方案3】:

    我从字符串创建文件的解决方案:

    class FileIO < StringIO
      def initialize(content:, filename:)
        super(content)
        @original_filename = filename
      end
    
      attr_reader :original_filename
    end
    
    FileIO.new(content: obj, filename: "#{username}.jpg")
    

    这帮助我解决了保存文件时出现 Carrierwave 错误的问题:

    TypeError:没有将 nil 隐式转换为 String

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多