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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1397閲覧

動画のプレビュー機能を実装したい

AkiDatsugoku26

総合スコア35

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

1クリップ

投稿2021/10/29 13:26

前提・実現したいこと

Rails: 6.0.3
ruby: 2.6.3
AWS Cloud9
Active Storage

railsで動画や漫画を投稿できるwebサービスを制作しています。
新規投稿画面にて動画を投稿した時のプレビュー機能を実装したいです

試したこと

漫画を投稿した際の画像のプレビュー機能は実装できており、
下記のコードを応用して動画もプレビューできないかと考えております。

rails

1<p class="sign" align="center">マンガを投稿する</p> 2<div class="form"> 3 <%= form_with model: @work, local: true do |form| %> 4 5 <div class="manga-image" align="center"> 6 <%= form.label :icatch, "表紙を選ぶ", class: "image_input_btn" %> 7 <%= form.file_field :icatch, class: "image_form push", onchange: "loadImage(this);" %> 8 <div id="post_images" style="display: none;"> 9 <p id="preview"></p> 10 </div> 11 <%= render "loadimage" %> 12 </div>

javascript

1 2<script> 3 function loadImage(obj) 4 { 5 var allPreview = document.getElementById('post_images'); 6 var newPreview = document.createElement("p"); 7 allPreview.querySelector("p").remove(); 8 newPreview.setAttribute("id","preview"); 9 allPreview.insertBefore(newPreview, allPreview.firstChild); 10 document.getElementById("post_images").style.display = ""; 11 for (i = 0; i < obj.files.length; i++) { 12 var fileReader = new FileReader(); 13 fileReader.onload = (function (e) { 14 var img = new Image(); 15 img.src = e.target.result; 16 document.getElementById('preview').appendChild(img); 17 }); 18 fileReader.readAsDataURL(obj.files[i]); 19 } 20 } 21</script>

イメージ説明

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

画像のプレビューはこちらを参照させていただきました。
https://qiita.com/sharesence/items/61f1136b7e1d92efa8e8

やりかたにこだわりがある訳ではないので、もしもっと良い方法や
簡単な方法があればぜひ教えて頂けると嬉しいです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

1 for (i = 0; i < obj.files.length; i++) { 2 var file = obj.files[i]; 3 var fileReader = new FileReader(); 4 // (1) 5 var isVideo = file.type.match(/^video//) 6 if (isVideo) { 7 fileReader.onload = (function (e) { 8 // (2) 9 var video = document.createElement("video") 10 video.src = URL.createObjectURL(file); 11 video.setAttribute("autoplay", "true") 12 document.getElementById('preview').appendChild(video); 13 }); 14 } else { 15 fileReader.onload = (function (e) { 16 var img = new Image(); 17 img.src = e.target.result; 18 document.getElementById('preview').appendChild(img); 19 }); 20 } 21 fileReader.readAsDataURL(file); 22 }

(1) file.type でファイルの種別を判定します。
image/jpeg や video/webm などの値が返ってくるので、今回は video/ で始まる場合は video と判定しています。

(2) videoタグを作り src 属性を設定して #preview に追加します。
video の src には URL を指定する必要があります。URL.createObjectURL で file を URL に変換します。

投稿2021/11/13 20:09

neko_daisuki

総合スコア2090

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

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

AkiDatsugoku26

2021/11/14 05:42

neko_daisukiさん回答ありがとうございます。 ほとんど諦めかけていて別の事をやっていたのですが改めて挑戦してみます。 解決できましたらこちらでまたコメントしますが取り急ぎお礼申し上げます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問