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]