0

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_urlbase64 でエンコードされているため機能しないことです。

良いことに、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

終わり

4

1 に答える 1