2

我正在使用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

但这似乎没有帮助。

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

谢谢

4

3 回答 3

10

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

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
于 2013-06-17T20:37:25.783 回答
1

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

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

然后将您的文件分配给profile_pic

于 2012-12-22T13:36:01.987 回答
0

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

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

于 2020-07-20T11:18:27.193 回答