Rails の初心者で、railscast のエピソード #253 に示されているように、画像 URL の Carrierwave アップロードを追加しようとしました。たとえば、通常のリンクを挿入すると、これまでのところすべてうまくいきます
http:/.....g/dog-01.jpg
私の問題は、data:image を出力する JavaScript プラグインから画像を取得したいということです。
var url = canvas.toDataURL('image/png');
document.getElementById("canvascontent").value = url;
また、data:image を入力 (#canvascontent) に挿入していることがわかります。
<%= ff.text_field :remote_name_url, class => "canvascontent" %>
だから今私の問題は、単純に data:image から text_field を保存しようとすると、:remote_name_url
base64 でエンコードされているため機能しないことです。
良いことに、Ruby には Base64 エンコーダーがあります。data:image をエンコードして画像ファイル (ここでは png) に保存するために、コンソールから実行できる単純なコードを作成しました。
require 'base64'
data_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB....."
png = Base64.decode64(data_url['data:image/png;base64,'.length .. -1])
File.open('testal', 'wb') { |f| f.write(png) }
だから最後に来ます。私の問題は、レールでこれを達成する方法がわからないことです! モデルbefore_createの「コード」があることは知っています。そのようなことを試しましたが、うまくいきませんでした。一時的に最初に画像を保護する必要があるからだと思います!
before_create do
require 'base64'
self.remote_name_url = Base64.decode64(remote_name_url['data:image/png;base64,'.length .. -1])
end
class Painting < ActiveRecord::Base
belongs_to :treatment
attr_accessible :name, :image, :remote_name_url
mount_uploader :name, BildUploader
before_create do
require 'base64'
self.remote_name_url = Base64.decode64(remote_name_url['data:image/png;base64,'.length .. -1])
end
end
<
class TreatmentsController < ApplicationController
def create
@patient = Patient.find(params[:patient_id])
@treatment = @patient.treatments.create(params[:treatment])
redirect_to patient_path(@patient)
end
def destroy
@patient = Patient.find(params[:patient_id])
@treatment = @patient.treatments.find(params[:id])
@treatment.destroy
redirect_to patient_path(@patient)
end
終わり