Je fréquente actuellement une école de programmation et suis passé à la phase de production de portfolio. Je voulais faire quelque chose comme Insta Stories qui me permette de publier de courtes vidéos, mais je craignais qu'il y ait moins d'articles à télécharger que ce à quoi je m'attendais, donc je vais l'écrire pour ne pas l'oublier cette fois.
Au départ, je pensais l'implémenter en utilisant Carrierwave etc., mais quand je l'ai étudié, il semble que le téléchargement de fichiers puisse être fait avec la fonction standard de Rails, donc je vais l'implémenter ici. Je suis un débutant qui connaît ActiveStorage aujourd'hui, veuillez donc consulter les articles d'autres personnes pour plus de détails. Je laisserai le flux jusqu'à la publication vidéo. Ceci est une citation d'un site de référence.
Une fonction ajoutée dans Rails 5.2 pour télécharger des fichiers. Avec cela, vous pouvez facilement créer une fonction de publication d'image, etc. avec un formulaire. Vous pouvez également télécharger facilement des fichiers vers des services de stockage cloud tels qu'Amazon S3, Google Cloud Storage et Microsoft Azure Storage. En plus du stockage cloud, vous pouvez également enregistrer des fichiers sur votre disque local.
$ rails active_storage:install
$ rails db:migrate
Deux tables sont créées, ʻactive_storage_blobs et ʻactive_storage_attachments
.
Ces deux continueront comme ils sont.
Cette fois, nous allons simplement créer un modèle appelé «Vidéo». J'ai créé «titre» et «introduction» dans la colonne. Je n'ai pas créé de colonne pour la vidéo elle-même ici.
$ rails g resource video title:string introduction:text
$ rails db:migrate
Cette fois, nous supposerons que vous ne pouvez publier qu'une seule vidéo à la fois.
Écrivez has_one_attached
dans le modèle Video
.
/app/models/video.rb
class Video < ApplicationRecord
has_one_attached :video
end
: video
est le nom du fichier, et il semble que vous puissiez lui donner n'importe quel nom en fonction de son objectif. (Si vous téléchargez une image, telle que : image
)
Je vais l'écrire dans le contrôleur de vidéos.
/app/controllers/videos_controller.rb
class VideosController < ApplicationController
def new
@video = Video.new
end
def create
@video = Video.new(video_params)
@video.create
redirect_to @video
end
def show
@video = Video.find(params[:id])
end
private
def video_params
params.require(:video).permit(:title, :introduction, :video)
end
end
Le modèle Video
n'a pas de colonne: video
, mais cela correspond à has_one_attaches: video
.
Cette fois, c'est un test pour voir si vous pouvez publier une vidéo, donc seule une nouvelle émission de création est écrite.
Écrivez le formulaire de publication avec nouveau.
/app/views/videos/new.html.erb
<%= form_with model: @video, local: true do |form| %>
<p>title</p><%= form.text_field :title %> <br>
<p>introduction</p><%= form.text_area :introduction %> <br>
<p>video</p><%= form.file_field :video %> <br>
<%= form.submit %>
<% end %>
Je pense que le formulaire de publication a été créé comme ça. Nous allons également créer une page de spectacle.
/app/views/videos/show.html.erb
<% if @video.video.attached? %>
<p><%= @video.title %></p> <br>
<p><%= @video.introduction %></p>
<%= video_tag rails_blob_path(@video.video) %>
<% end %>
Vous pouvez vérifier si @video a une vidéo avec .attached?
.
Si vous écrivez simplement <% = video_tag @ video.video%>
, il semble que vous recherchez des données dans le sens de / app / assets /
, et vous obtiendrez une erreur dans le pipeline d'actifs.
Écrivons rails_blob_path
.
Il est maintenant affiché. La vidéo ne sera pas lue si elle est laissée telle quelle. Écrivez «<% = video_tag%>» dans «
/app/views/videos/show.html.erb
<% if @video.video.attached? %>
<p><%= @video.title %></p> <br>
<p><%= @video.introduction %></p>
<video src="<%= rails_blob_path(@video.video) %>" type="video/mp4" controls></video>
<% end %>
controls
crée automatiquement une interface qui facilite l'utilisation de la vidéo.
Vous pouvez désormais télécharger, afficher et même lire la vidéo.
Je ne crée pas de colonnes, donc je suis sur le point de les lister, mais cela fonctionnera-t-il? Je posterai si quelque chose se produit à nouveau.
Puisque cette fois, nous créons un portfolio, il est supposé que la vidéo sera du matériel gratuit et courte, environ quelques secondes, compte tenu du déploiement. Les longues vidéos sont de grande taille, donc cela semble être un gros problème si vous essayez de le faire localement ou sur le réseau. (Les gens de l'école m'ont averti de le garder au minimum nécessaire) Il semble y avoir une méthode telle que l'utilisation d'AWS S3 bien qu'il y ait des frais d'utilisation (même si je ne suis pas encore familier avec ce domaine) J'espère que si vous êtes un débutant comme vous, vous penserez qu'il existe une telle méthode.
Recommended Posts