Techioz Blog

Rails アプリで Base64 イメージをファイルとして保存する方法

概要

コントローラーでbase64画像をファイルとして保存できず、エラーも発生しません。データベースには保存したくないのですが、パブリックフォルダーにのみ保存します。

私はRails 4.2.8とRuby 2.1を使用しています。これはレガシーアプリであり、base64画像を生成するためにhtml2canvasを使用しています。

私のコントローラーの定義:

def save_image
  image = params[:image]
  file = "#{Rails.root}/public/dashboard.png"
  File.open(file,'wb') do |f|
    f.write Base64.decode64(image)
  end
  file.save
end

Tempfileを使用して既存のファイルを使用しようとしましたが、「image = request.body[‘image’]」はどちらも機能しません。

ルート:

post 'save_image' => 'intranet/dashboard#save_image'

そして、html2canvas関数でpost reqを呼び出します。

html2canvas(document.getElementById('list')).then(canvas => {
        base64String = canvas.toDataURL();
        var url = '/save_image';
        $.ajax({
            type: "POST",
            url: url,
            dataType: 'text',
            data: {
                image : base64String
            }
        });
      });

ログにアラートが表示されず、これをデバッグする方法がわかりません。

解決策

私はこれで解決します:

protect_from_forgery except: [:save_image]