#前提・実現したいこと
Rails5で開発をしています。
以下の記事や以前いただいた回答を参考に、ビューでユーザーがトリミングした画像をアップロードできる機能を実装中です。
canvasの画像をtoDataURL()を使ってRailsのcarrierwaveで保存するまで
Canvasで描画した画像を送信してサーバに保存する
#発生している問題
コントローラ側に値が渡され、Postインスタンスを作る過程で、
path name contains null byte
というエラーが表示されます。
一通り調べましたが、ここで言うpath nameとはなんのパスを指しているのか、そこになぜヌル文字が含まれているのかが分からないので、ご意見をいただきたいです。
#該当のソースコード
エラー画面では以下のコードの、@post = Post.new(tmp_post)
付近で発生していると表示されます。
ruby
1class PostsController < ApplicationController 2... 3 def new 4 @post = Post.new 5 end 6 7 def create 8 require "base64" 9 post = params.require(:post).permit( 10 :designer_id, 11 {image_name: []}, 12 :remote_image_url, 13 :detail 14 ) 15 tmp_post = post 16 image_data = Base64.urlsafe_decode64(tmp_post[:remote_image_url]) 17 tmp_post[:image_name][0] = image_data 18 tmp_post[:remote_image_url] = nil 19 @post = Post.new(tmp_post) 20 if @post.save 21 ... 22 end 23 end 24 ... 25end
クライアントサイドは以下のように処理し、サーバー側でimage_nameとremote_image_urlをスワップしています。
javascript
1$('#_submit').on('click', function(){ 2 var canvas = $('#crop_img').cropper('getCroppedCanvas'); 3 var canvas_data = canvas.toDataURL().replace(/^.*,/, ''); 4 5 $("#post_image_name").val(""); //画像データを二重に送信するのを防ぐ 6 $("#post_remote_image_url").val(canvas_data); 7 $("#myform").submit(); 8 9});
#試してみたこと
tmp_post[:remote_image_url] = nil
のnullが悪いのかと思い、
tmp_post[:remote_image_url] = ''
としてみましたが変わりませんでした。
#使用している環境
Ruby on Rails 5
画像のアップにはCarrierwaveを、トリミングにはcropper.jsを使用しています。
回答1件
あなたの回答
tips
プレビュー