Ich besuche derzeit eine Programmierschule und bin in die Portfolio-Produktionsphase übergegangen. Ich wollte so etwas wie Insta Stories machen, mit denen ich kurze Videos posten kann, aber ich hatte Angst, dass es weniger Artikel zum Hochladen von Videos gibt als erwartet, also werde ich es schreiben, damit ich es diesmal nicht vergesse.
Ursprünglich dachte ich darüber nach, es mit Carrierwave usw. zu implementieren, aber als ich es untersuchte, schien es, dass das Hochladen von Dateien mit der Standardfunktion von Rails erfolgen kann, daher werde ich es hier implementieren. Ich bin ein Anfänger, der ActiveStorage heute kennt. Weitere Informationen finden Sie in den Artikeln anderer Personen. Ich werde den Fluss dem Video-Posting überlassen. Dies ist ein Zitat von einer Referenzseite.
Eine in Rails 5.2 hinzugefügte Funktion zum Hochladen von Dateien. Mit dieser Funktion können Sie ganz einfach eine Bildposting-Funktion usw. mit einem Formular erstellen. Sie können Dateien auch problemlos in Cloud-Speicherdienste wie Amazon S3, Google Cloud Storage und Microsoft Azure Storage hochladen. Neben dem Cloud-Speicher können Sie auch Dateien auf Ihrer lokalen Festplatte speichern.
$ rails active_storage:install
$ rails db:migrate
Es werden zwei Tabellen erstellt, "active_storage_blobs" und "active_storage_attachments". Diese beiden werden so weitermachen, wie sie sind.
Dieses Mal erstellen wir einfach ein Modell namens "Video". Ich habe "Titel" und "Einführung" in der Spalte erstellt. Ich habe hier keine Spalte für das Video selbst erstellt.
$ rails g resource video title:string introduction:text
$ rails db:migrate
Dieses Mal gehen wir davon aus, dass Sie jeweils ein Video veröffentlichen können. Schreiben Sie "has_one_attached" in das "Video" -Modell.
/app/models/video.rb
class Video < ApplicationRecord
has_one_attached :video
end
: video
ist der Name der Datei, und es scheint, dass Sie ihr je nach Zweck einen beliebigen Namen geben können. (Wenn Sie ein Bild hochladen, z. B. : image
)
Ich werde es in den Video-Controller schreiben.
/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
Das "Video" -Modell hat keine ": Video" -Spalte, dies entspricht jedoch "has_one_attaches: video". Diesmal ist es ein Test, um zu sehen, ob Sie ein Video veröffentlichen können, sodass nur eine neue Show zum Erstellen geschrieben wird.
Schreiben Sie das Postformular mit neu.
/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 %>
Ich denke, dass das Posting-Formular so erstellt wurde. Wir werden auch eine Show-Seite erstellen.
/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 %>
Sie können überprüfen, ob @video ein Video mit ".attached?" Hat.
Wenn Sie einfach "<% = video_tag @ video.video%>" schreiben, scheinen Sie nach Daten in Richtung "/ app / assets /" zu suchen, und es wird ein Fehler in der Asset-Pipeline angezeigt.
Schreiben wir rails_blob_path
.
Es wird jetzt angezeigt. Das Video wird nicht abgespielt, wenn es unverändert bleibt. Schreiben Sie "<% = video_tag%>" in "
/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 %>
control
erstellt automatisch eine Schnittstelle, die die Verwendung des Videos vereinfacht.
Jetzt können Sie das Video hochladen, anzeigen und sogar abspielen.
Ich mache eigentlich keine Spalten, also werde ich sie auflisten, aber wird es funktionieren? Ich werde posten, wenn wieder etwas passiert.
Da wir dieses Mal ein Portfolio erstellen, wird davon ausgegangen, dass das Video in Anbetracht der Bereitstellung freies Material und kurz ist, etwa einige Sekunden. Lange Videos sind groß, daher scheint es eine große Sache zu sein, wenn Sie versuchen, dies lokal oder im Netzwerk zu tun. (Die Schulleute haben mich gewarnt, es auf das notwendige Minimum zu beschränken) Es scheint eine Methode wie die Verwendung von AWS S3 zu geben, obwohl eine Nutzungsgebühr erhoben wird (obwohl ich mit diesem Bereich noch nicht vertraut bin). Ich hoffe, wenn Sie ein Anfänger wie Sie sind, werden Sie denken, dass es eine solche Methode gibt.
Recommended Posts