Railsで、投稿前の確認画面で画像をプレビューするための戦い

結論

  • tmp配下に置かれているファイルをpublic配下に一時保存して、それを使ってなんとかする

情報

ファイルの保存先: "#{Rails.root}/public"

書き込みはこうする:

file = File.open("#{Rails.root}/public/#{file_name}")
file.write(読み込んだバイナリファイル)
file.close

file.close は使ったら片付けよう的なやつです。

ActionDispatchに飲み込まれているtmpファイルをpublicに再配置するならこんな感じ

なお、 params[:image] に画像がアップロードされているものとする。

file = File.open("#{Rails.root}/public/#{params[:image].original_filename}", "w+b")
file.write(params[:image].tempfile.read)
file.close

なお、JSONを受け付けてJSONをレスポンスするようなAPIにデプロイする場合、これらのデータをbase64形式で投げるのが最も妥当と考えられる。 multipart: true は妥当な選択肢のように見えるけれど、データの受け口が決まっている場合に画像を含む場合だけそれに対応させるのは結構大変な気がする。 そのうち追加でまとめたいところ。。