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
は妥当な選択肢のように見えるけれど、データの受け口が決まっている場合に画像を含む場合だけそれに対応させるのは結構大変な気がする。
そのうち追加でまとめたいところ。。