サイト上で作成した画像をサーバーに保存する
工程としてはざっくり
プレビューを画像化する
画像をActive Storageに保存する
保存先はローカルではなくS3に保存する
がある。
上と下は技術検証の段階で調べていたけど、真ん中の「画像をActive Storageに保存する」方法を検証していなかった。
検証していなかったのは、ろくに調べずに簡単に保存できるとばかり思っていたため。
いざ調べてみるとActive Storageで保存する画像はクライアントがファイルから選択するものばかりで、自分と同じようなことをしている人がうまく出てこなかった。
:@Obregonia1: さんが偶然にも自分と同じように画像を作成するサービスを作っていたので、参考になるコードを教えてもらった!!!
参考にしたサイトも教えてもらった
分からなかったこと
Railsガイドで@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf')で指定したファイルをattachする処理は理解できたけど、Obregonia1さんのコードで
code:ruby
image.attach(
io: image_blob.to_io,
filename: Time.zone.now,
content_type: image_blob.mime_type
)
と image_blob.to_ioをioに渡している処理が理解できなかった。
code:ruby
class ImageBlob
def to_io
StringIO.new(decoded_content)
end
private
def decoded_content
Base64.decode64(content)
end
end
分かったこと
質問タイムで:@Obregonia1: と :@cafedomancer: にコードの分からないところを教えてもらった。
io:にはINPUTとOUTPUTをするクラスを渡して上げる必要がある
という流れで実装している
StringIO
IOインスタンス
inputとoutoputができるオブジェクト
Fileだったりnetworkだったり
StringIO
IOクラスを継承した、Stringを扱うためのIOクラス
感想など
ちなみに後に「サイト上で作成した画像を保存するのはレアケース」ということを梅本さんに教えて貰った。
知らずに「調べればやり方はすぐ出てくるだろう」と思っていた……!
:@Obregonia1: に共有して貰わなかったらここで数日溶かしていたと思うので本当にありがたい。
自作サービスはいろんな人に聞いたり教えてもらっているおかげで進められているな〜