carrierwaveは、Railsアプリケーションで、画像ファイルをアップロードなどを助けてくれるツールとしてとてもポピュラーです。
https://github.com/carrierwaveuploader/carrierwave
CarrierWave + Rails 5.1で画像アップローダー
Rails 超お手軽な画像アップローダー CarrierWave の使い方
コード上で作成した画像をそのまま、carrierwaveに渡す方法をメモとして残しておきます。
1年ほど前に書いたものなので、今のバージョンではできるようになっているかもしれませんね。
実装方法
まず、StringIOクラスを継承したCarrierStringIOクラスを作ります。
.rb
class CarrierStringIO < StringIO
def initialize(*args)
super(*args[2..-1])
@filepath = args[0]
@content_type = args[1]
end
def original_filename
@filepath
end
def content_type
@content_type
end
end
そして、お決まりでmount_uploader
を設定しますが、モデルのimage_dataに代入されたらCarrierStringIO
クラスを自身のimageに代入するようにします。
これ、もっといい方法があるかもしれませんが、私の脳みそじゃこれぐらいしかできません。
.rb
class Hoge < ActiveRecord::Base
mount_uploader :image, ImageUploader
def image_data=(data)
content_type = "image/png"
io = CarrierStringIO.new("title.png", content_type, data)
self.image = io
end
end
結果
- これでできるようになります
- もっといい方法あれば教えてください