質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

716閲覧

railsでcanvasを使って画像をバイナリ形式で保存したい

hokosugi

総合スコア63

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1グッド

0クリップ

投稿2018/09/25 11:03

編集2018/09/25 20:38

前提・実現したいこと

与えられた項目(headline)に従い写真を取り画像を各項目ごとに取得するrailsのアプリを作成中です。
webRTCで撮影された画像をcanvasに渡してtoDataUrlメソッドで文字列としてサーバー側に格納しています。
有料スクールのメンターによると、データベース(mysql2)に画像データをそのまま保管するのは良くないと
伺い、createObjectURL()等を使いローカルPCに画像データを格納する予定ですが、バイナリ(blob)
今のコードに当てはめてみようとしたところで躓きました。

発生している問題

イメージ説明

blobpicカラム(blob型)に格納するはずのblobが入っていない。

該当のソースコード

javascript

1(省略) 2$('#save-button').click(function(){ 3 var canvas = document.getElementById('canvas'); 4 // var img = document.getElementById('img'); 5 // var ctx = canvas.getContext('2d'); 6 var url = canvas.toDataURL('image/jpeg'); 7 // base64データをblobに変換 8 var blob = Base64toBlob(url); 9 alert(blob.size) 10 // hdle_id = "10" 11 // alert(url.length); 12 $("#picture_image_url").val(""); 13 $("#picture_image_url").val(url); 14 $("#picture_blobpic").val(""); 15 $("#picture_blobpic").val(blob); 16 $("#new_picture").submit();

html.erb

1<body> 2 <h2>Video</h2> 3 <video id="camera" autoplay></video> 4 <button id="start">start</button> 5 <h2>写真(canvas)</h2> 6 <canvas id="canvas"></canvas> 7 <!--<h2>Img</h2>--> 8 <!--<img id="img">--> 9 <!--<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>--> 10 <!--<script type="text/javascript" src="./script.js"></script>--> 11 12 <%= form_for(@picture, url: headline_pictures_path) do |f| %> 13 <%= f.hidden_field :headline_id, :value => @headline %><br> 14 <%= f.hidden_field :image_url, :value => "" %> 15 <%= f.hidden_field :blobpic, :value => "" %> 16 <!--<%= f.submit %>--> 17 <% end %> 18 <button id="save-button">保存</button> 19</body>

view

1<body> 2 <h2>Video</h2> 3 <video id="camera" autoplay></video> 4 <button id="start">start</button> 5 <h2>写真(canvas)</h2> 6 <canvas id="canvas"></canvas> 7 <!--<h2>Img</h2>--> 8 <!--<img id="img">--> 9 <!--<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>--> 10 <!--<script type="text/javascript" src="./script.js"></script>--> 11 12 <%= form_for(@picture, url: headline_pictures_path) do |f| %> 13 <%= f.hidden_field :headline_id, :value => @headline %><br> 14 <%= f.hidden_field :image_url, :value => "" %> 15 <%= f.hidden_field :blobpic, :value => "" %> 16 <!--<%= f.submit %>--> 17 <% end %> 18 <button id="save-button">保存</button> 19</body>

試したこと

$("#picture_blobpic").val(blob);
をval(blob.size)やval(blob.type)に変えて変数blobまでは正常に得られていることを確認

javascriptのBLOBリファレンスをみてsizeとtype以外にプロパティがないのでblob.valueとかが効かないことを確認

$("#picture_blobpic").val()を.data()メソッドに変えてみても駄目

blobpicカラムのデータ型をtext型にする>[BLOB:OBJECT]とtextが入る=>変数blobがblobオブジェクトであることは確認できる

####何かアドバイスありましたらお願いします。

補足情報(FW/ツールのバージョンなど)

ruby: 2.3.1 p122
rails: 4.2.6

NightitWy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

blobはバイナリデータで特に指定しないとからの文字列が返ってくる。
https://numb86-tech.hatenablog.com/entry/2018/01/22/203406

MIMEの指定もできるが、データベースにバイナリデータを格納するはデータ量が大きくなりすぎるので良くないです。
https://teratail.com/questions/81233

よってtoDataUrlの文字列を第2引数で解析度を落としデータ量を下げた上でデータベースに格納しました。

投稿2018/12/29 23:31

hokosugi

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問