前提・実現したいこと
ここに質問の内容を詳しく書いてください。
画像の編集機能を実装していてcanvas上にユーザーが選択した画像を表示させたいです。
発生している問題・エラーメッセージ
Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
該当のソースコード
javascript
1var file = document.querySelector('.sell-upload-drop-file'); 2var canvas = document.getElementById('c1'); 3var canvasWidth = 400; 4var canvasHeight = 300; 5var uploadImgSrc; 6 7// Canvasの準備 8canvas.width = canvasWidth; 9canvas.height = canvasHeight; 10var ctx = canvas.getContext('2d'); 11 12function loadLocalImage(e) { 13 // ファイル情報を取得 14 var fileData = e.target.files[0]; 15 // FileReaderオブジェクトを使ってファイル読み込み 16 var reader = new FileReader(); 17 // ファイル読み込みに成功したときの処理 18 reader.onload = function() { 19 // Canvas上に表示する 20 uploadImgSrc = reader.result; 21 canvasDraw(); 22 } 23 // ファイル読み込みを実行 24 reader.readAsDataURL(fileData); 25} 26 27// ファイルが指定された時にloadLocalImage()を実行 28file.addEventListener('change', loadLocalImage, false); 29 30// Canvas上に画像を表示する 31function canvasDraw(imgSrc) { 32 // canvas内の要素をクリアする 33 ctx.clearRect(0, 0, canvasWidth, canvasHeight); 34 35 // Canvas上に画像を表示 36 var img = new Image(); 37 img.src = uploadImgSrc; 38 img.onload = function() { 39 ctx.drawImage(img, 0, 0, canvasWidth, this.height * (canvasWidth / this.width)); 40 41 // Canvas上にテキストを表示 42 addText(); 43 44 // canvasを画像に変換 45 var data = canvas.toDataURL(); 46 47 // 画像として出力 48 var outputImg = document.createElement('img'); 49 outputImg.src = data; 50 document.getElementById('result').appendChild(outputImg); 51 } 52 }
HTML
1<div class='sell-dropbox-container clearfix'> 2 <div class='have-item-0 sell-upload-items'> 3 <ul> 4 </ul> 5 </div> 6<label for="item_images"><div class='clearfix have-item-0 sell-upload-dropbox'> 7<input class="sell-upload-drop-file" multiple="multiple" style="display: none;" type="file" name="item[images][]" id="item_images" /> 8<pre> 9 ドラッグアンドドロップ 10 またはクリックしてファイルをアップロード 11</pre> 12</div> 13<ul class='has-error-text'> 14</ul> 15</label> 16<section class='modalArea' id='modalArea'> 17 <div class='modalBg' id='modalBg'></div> 18 <div class='modalWrapper'> 19 <div class='modalContents'> 20 <div class='modal-bold'> 21 写真を切りとる 22 </div> 23<a class="disabled" tabindex="-1" href="/"><input class="sell-upload-drop-file" multiple="multiple" style="display: none;" type="file" name="item[images][]" id="item_images" /> 24 <span> 25 写真を変更する 26 </span> 27</a> 28<i class='fas fa-camera'></i> 29</div> 30<div class='sell-crop-editor'> 31<canvas id='c1' style='cursor: grab;'></canvas> 32</div> 33<div class='clearfix'> 34 <li class='cansel-button' id='closeModal'> 35 <a href="/items/new?method=post"> 36 キャンセル 37 </a> 38</li> 39<li class='ok-button'> 40 <a href=""> 41 完了 42 </a>
不明点
reader.readAsDataURL(fileData);の部分が悪いんだとは思うのですがエラー内容が読み解けず撃沈しています。
どなたかこのエラーについてご教授いただきたいです。
補足情報(FW/ツールのバージョンなど)
Ruby on Rails 5.2.1
fileDataをconsole.log()で確認するとどうなってますか?Blob型でないと適用できないので、型が違う情報なのではないかと思います。
http://e-words.jp/w/BLOB.html
console.log(fileData);で調べたところ"undefind"でした。これは型が原因なのでしょうか?
どこで書いたか分からないですが、そもそもデータ取得できてないようですね。
再現確認のためにHTMLもご提示ください。
HTMLを記載させていただきました!
HTMLが見当たりませんが?
編集できていないようです。
すみませんでした!編集完了しました
これはHTMLというより何かのフレームワークのVIEWファイルですよね。
ブラウザから「ソースを表示」を行った情報を提示されたほうがより多くの人が再現確認できます。
それか、そのフレームワークの情報、バージョンなどの環境情報をご提示ください。
すみません勘違いしていました。
現在、Sublimetextを使っています
version 3.1.1、build3176です
それはテキストエディタであって言語ではないですよね。「HTML」で提示された内容は何のプログラミング言語でしょうか。
Ruby on Rails です。
ご迷惑おかけして申し訳ありません!
Rails 5.2.1です
タグおよび環境情報として質問本文に追記願います。単純にhtmlでない場合、再現確認を行うには環境が手元にないといけません。
単純にhtmlなどクライアントだけの対応にしたいのであればブラウザから実行して「ソースを表示」した際のhtmlソースをご提示ください
ご迷惑をおかけして申し訳ありません
ソースを表示するからHTMLを持ってきました!
コード提示部分がマークダウンミスってるので修正してもらえたらと。
私の方は特に迷惑と思ってないので淡々と回答に必要な情報を提示してもらえたらそれで良いです
ありがとうございます!
マークダウン記法で書かせていただきました!
編集できてなかったのでやり直します
これであってますでしょうか?
プレビューが表示されてるはずなので落ち着いてそちらを確認して調整してください
あと、タグの追加、環境情報(言語、フレームワーク)の追記ですね
タグ追加、環境情報は完了しました!
HTMLはおかしいでしょうか?
結果を見てみれば明らかですね。→HTMLのマークダウン
<a href="">
完了
</a>
```
↑ここにバッククォート3つ追加するだけで良いはずですが。
タグに必要なのはHTMLよりもRuby、Railsですね。
ただ、HTMLも結構半端な提示のされ方をしているような。
</div>や</label>はあるけど開始タグがなかったり。
開始タグはあっても閉じタグがなかったり。
すいません!修正します!
JavaScriptのコードにもSyntaxエラー出てますね・・・。
修正しました。いかがでしょうか?
回答2件
あなたの回答
tips
プレビュー