私は2つのアプローチで作業していますが、というのは、キャンバスをPaperclipで保存することだけです。次いでPaperclipでキャンバスを保存する方法
まずBase64でのアプローチ
キャンバスとAjaxと
$(document).on('click', '#save_canvas', function() {
var base64Data = canvas.toDataURL()
$.ajax({
type: "POST",
url: "pictures/",
data: { base64: base64Data },
success: function(post){ console.log('success') },
error: function(post){ console.log(this) }
})
})
アクセスparamsはparamsはするBASE64を追加[:BASE64] VIをPaperclip.adapters_io
def create
@picture = Picture.new(picture_params)
# ...
image = Paperclip.io_adapters.for(params[:base64])
image.original_filename = "canvas.png"
@picture.image = image
@picture.save
redirect_to @picture
end
これが唯一のparamsでbase64
を含め、他のすべての必要なのparamsが不足しているので、私は、これが開始する、動作していないと思います。
第二のアプローチ
キャンバスをBase64にし、手動で(ちょうどそれが動作し、そこから作業を続けるために)コンソールからデータをコピーし、フォームに貼り付けフィールド。
= link_to " Base64", "#", remote: true, onclick: "console.log(canvas.toDataURL('png'))"
= form_for @picture, html: { multipart: true } do |form|
= form.text_field :base64
= form.submit
アクセスのparams [:絵] [:BASE64] Paperclip.adapters_io
を経由してこのアプローチで
def create
@picture = Picture.new(picture_params)
image = Paperclip.io_adapters.for(params[:picture][:base64])
image.original_filename = "canvas.png"
@picture.image = image
@picture.save
redirect_to @picture
end
、私はキャンバスを保存することができます。しかし、私は2つの問題が見つかりました:
1)私はコピー/貼り付けの手順を排除する必要があります。
2)キャンバスは、100万文字以上の非常に長い文字列を生成することがあります(それは狂っています)。フォームフィールドではこのような巨大な長さが許されません。
これは、ペーパークリップ4.3を使用してのRails 4.2プロジェクトであり、Herokuの上でホストされます。
ありがとうございます!
感謝Yacine、私はちょうど私のコントローラを修正する必要がありました。 – Horacio
こんにちはYacine、私はこの方法で画像を保存するのが実際には遅くて、5倍〜6倍速く感じることに気付きました。そのため、1000x1000pxのキャンバス内にレンダリングされた画像は、保存するために16〜19秒(ローカルホスト)を要します(イメージをエンコードすることがほとんどです)。これを改善する方法について考えていますか?ありがとう! – Horacio
サーバ側かクライアント側か?それはtoDataURLの部分にあるということですか?はいの場合、私は悲しいことにそれを修正するための手がかりを持っていません。 それがサーバー側の場合は、一時ファイルを作成するbase64ライブラリを使用して回避策を作成し、この一時ファイルをpaperclipに使用することができます。がんばろう ! – Yacine