Erstellen Sie eine einfache Musik-Streaming-App mit Ruby on Rails

Amazon S3 ist eine großartige Möglichkeit zum Speichern von Dateien. Die Integration in Ihre Website zu lernen, kann jedoch eine Herausforderung sein. In diesem Artikel erfahren Sie, wie Sie Amazon S3 und Ruby on Rails durch den Aufbau einer einfachen Musik-Streaming-Anwendung integrieren.


Was ist das und wie funktioniert es??

Amazon S3 ist "Speicher für das Internet"

Wie auf der Amazon-Website gesagt, ist Amazon S3 "Speicher für das Internet". Es ist nicht nur kostengünstig, sondern auch schnell und zuverlässig. Auf diese Weise können Sie Inhalte auf Ihrer Website bereitstellen, z. B. Bilder, Videos oder so ziemlich alles, was Sie möchten. Amazon S3 funktioniert nicht genau wie der Speicher auf Ihrem Computer. Daher sollten Sie Folgendes beachten:

  • Bei Amazon S3 werden Ordner "Buckets" und Dateien "Objekte" genannt..
  • Buckets auf der obersten Ebene werden verwendet, um die URL für den Zugriff auf Ihre Daten zu bestimmen. Sie können also nur Namen verwenden, die noch nicht vergeben wurden. Wenn zum Beispiel jemand bereits einen Bucket der obersten Ebene mit dem Namen "videos" erstellt hat, können Sie diesen Namen nicht verwenden.
  • Es ist eine gute Idee, einen Bucket der obersten Ebene mit dem Namen Ihrer Website zu haben und Unterebenen von Buckets zu verwenden, um Dateien in verschiedene Abschnitte wie Bilder, Videos oder Musik zu unterteilen.

Bevor wir anfangen?

Bevor Sie mit diesem Lernprogramm fortfahren, sollten Sie einige wichtige Punkte beachten:

  • Der auf Ihrem Computer installierte Ruby-Interpreter und RubyGems zusammen mit dem Rails-Juwel
  • Kenntnis der Zugangsschlüssel-ID und des geheimen Zugriffsschlüssels für Amazon S3 (oder haben Sie mindestens Zugriff darauf)
  • Ein grundlegendes Verständnis von Ruby on Rails

Was wir bauen werden

Das Endprodukt dieses Tutorials ist eine einfache Anwendung zum Streamen und Herunterladen von Musik. In dieser Anwendung kann der Benutzer Folgendes tun:

  • Zeigen Sie eine Liste aller aktuell hochgeladenen Musikdateien an und laden Sie sie selbst hoch
  • Laden Sie die Musik auf verschiedene Arten herunter. Dazu gehören das Streamen mit HTML5-Audio, das Herunterladen über HTTP oder das Herunterladen über eine .torrent-Datei

Wenn diese Anwendung abgeschlossen ist, haben Sie alle wichtigen Themen kennen gelernt, die Sie zur Verwendung von Amazon S3 in Ihrer Ruby on Rails-Anwendung benötigen.


Lass uns anfangen!

Mit dem aws-s3-Gem können Sie mit dem Amazon S3-Dienst in Ihrer Anwendung interagieren.

Als Erstes installieren Sie die aws-s3 Rubin Edelstein Mit dem Gem können Sie mit dem Amazon S3-Dienst in Ihrer Anwendung interagieren. Wenn Sie Windows verwenden, führen Sie einfach den folgenden Befehl aus:

 gem install aws-s3

Nachdem dies installiert ist, generieren Sie unsere Rails-Anwendung mit dem folgenden Befehl:

 Schienen neue mp3app

Der letzte Schritt, um Ihre Anwendung zu starten, besteht darin, in das Verzeichnis mp3app / public zu gehen und die Datei mit dem Namen "index.html" zu löschen. Sobald dies abgeschlossen ist, kann Ihre Anwendung mit Amazon S3 interagieren!


Bei Amazon S3 anmelden

Mit Ihrer Zugangsschlüssel-ID und Ihrem geheimen Zugriffsschlüssel können Sie eine Verbindung zu Amazon S3 herstellen.

Damit wir mit Amazon S3 interagieren können, müssen wir unserer Anwendung mitteilen, wie sie sich bei Amazon S3 anmelden soll. Hier sind Ihre Zugangsschlüssel-ID und Ihr geheimer Zugangsschlüssel hilfreich. Mit Ihrer Zugangsschlüssel-ID und Ihrem geheimen Zugriffsschlüssel können Sie eine Verbindung zu Amazon S3 herstellen. Aber zuerst müssen wir unserer Anwendung mitteilen, dass wir das verwenden aws-s3 Juwel. Wir machen das im Gemfile:

 gem 'aws-s3',: required => 'aws / s3'

Damit unsere Anwendung diesen Edelstein tatsächlich verwenden kann, müssen Sie ihn eingeben Befehlspaket installieren. Nun, da es funktioniert, müssen wir unserer Anwendung mitteilen, wie sie sich bei Amazon S3 anmelden soll. Das machen wir auch im config / application.rb Datei in einer neuen Zeile innerhalb der Application-Klasse:

 AWS :: S3 :: Base.establish_connection! (: Access_key_id => 'Geben Sie Ihre Zugangsschlüssel-ID hier ein',: secret_access_key => 'Geben Sie Ihren geheimen Zugriffsschlüssel hier ein')

Dieser Code weist unsere Anwendung an, eine Verbindung zu Amazon S3 herzustellen, sobald die Anwendung gestartet wird (die application.rb Datei wird geladen, wenn Ihre Anwendung gestartet wird). Eine letzte Sache, die der Anwendungsdatei hinzugefügt werden muss, ist eine Konstante mit dem Wert des Buckets, das wir verwenden werden. Der Grund dafür ist, dass, wenn wir jemals ändern müssen, welchen Bucket wir verwenden, dieser nur an diesem einen Ort aktualisiert werden muss. Es sollte ungefähr so ​​aussehen:

 BUCKET = "s3tutorialmusic"

Für dieses Tutorial habe ich mich entschieden, den Eimer zu benennen s3tutorialmusic, Sie sollten dies jedoch durch den Eimer ersetzen, den Sie in Ihrem Konto haben. Am Ende sollte Ihre Datei ungefähr so ​​aussehen (jedoch mit Ihren eigenen Anmeldeinformationen):

 erfordern File.expand_path ('? / boot', __FILE__) erfordern 'Schienen / Alle' Bundler.require (: default, Rails.env), falls definiert? (Bundler) -Modul Mp3app-Klasse Anwendung < Rails::Application config.encoding = "utf-8" config.filter_parameters += [:password] AWS::S3::Base.establish_connection!( :access_key_id => 'Geben Sie Ihre Zugangsschlüssel-ID hier ein',: secret_access_key => 'Geben Sie Ihren Zugriffsschlüssel hier ein') BUCKET = 's3tutorialmusic' end end

Controller generieren

Jetzt können wir endlich damit beginnen, dass unsere Anwendung tatsächlich etwas im Browser anzeigt. Lassen Sie uns zunächst den Controller und die erforderlichen Ansichten generieren. Insgesamt generieren wir drei Aktionen für unseren Controller (die wir Songs nennen werden): Index, hochladen und löschen.

  • Die Indexaktion wird unsere Hauptseite sein.
  • Die Upload-Aktion dient zum Hochladen neuer Musik zu Amazon S3, sodass keine Ansicht erforderlich ist.
  • Schließlich hat die Löschaktion keine Ansicht und ist für das Löschen von Musik verantwortlich.

Letztendlich ist die einzige Ansicht, die wir für diese Anwendung benötigen, die Indexansicht, da sie als zentrale Steuerungsleiste für jede Aktion dient, die Sie ausführen können. Jetzt kombinieren wir das alles zu einer schönen Befehlszeilenanweisung:

 Schienen g Controller Songs Index Upload löschen

Wenn dies abgeschlossen ist, löschen Sie die erstellten Ansichten für hochladen und löschen, weil sie nicht verwendet werden. Fahren wir mit dem Schreiben des Codes für die Indexaktion fort!


An der Indexaktion arbeiten

In der Indexaktion können Benutzer mit dem fertigen Produkt neue Musik hochladen und vorhandene Musik löschen. In der Controller-Datei dieser Aktion ist für das Hochladen neuer Musik nichts zu tun. Wir benötigen jedoch eine Liste der aktuellen Songs, damit Benutzer sie löschen können.

Zuerst müssen wir ein Objekt abrufen, das auf unseren Musik-Bucket verweist (denken Sie daran, dass der Name dieses Bucket in der Konstante BUCKET gespeichert ist). So machen wir das:

 AWS :: S3 :: Bucket.find (EIMER)

Damit wir die in der. Verfügbaren Methoden anwenden können aws-s3 Gem, wir müssen dem Ruby-Interpreter mitteilen, dass wir nach den Funktionen in suchen wollen AWS :: S3 Namespace, weshalb dies Teil des Methodenaufrufs ist. Das Eimer class enthält alle Methoden, die mit der Bearbeitung von Buckets zusammenhängen. Endlich, das finden Die Methode akzeptiert einen Parameter, den Namen des Buckets, und gibt ein Objekt zurück, das auf diesen Bucket verweist. Jetzt, da wir den Eimer haben, lassen Sie uns alle Objekte abrufen, indem Sie Folgendes tun:

 AWS :: S3 :: Bucket.find (BUCKET) .objects

Das Objekte Die Methode gibt einen Hash mit den Namen aller Objekte in diesem Bucket zurück. Schließlich müssen wir das Ergebnis dieses Methodenaufrufs in einer Instanzvariablen speichern, damit wir es in unserer Ansicht verwenden können. Am Ende wird die Indexaktion so aussehen:

 def index @songs = AWS :: S3 :: Bucket.find (BUCKET) .objects end

Fortsetzung der Indexansicht

Jetzt müssen wir die Ansicht für den Benutzer erstellen, um Musik hochzuladen und zu löschen. Beginnen wir mit dem späteren und erstellen Sie eine ungeordnete Liste aller aktuell hochgeladenen Objekte mit einem Link zum Löschen dieses Objekts. Das können wir so machen:

 
    <% @songs.each do |song| %>
  • <%= song.key %> - <%= link_to "Delete", "songs/delete/?song=" + song.key, :confirm => 'Möchten Sie' + song.key + 'wirklich löschen?' %>
  • <% end %>
  • Zuerst erstellen wir eine ungeordnete Liste.
  • Dann durchlaufen wir alle Songs in der @Lieder Variable mithilfe der jeweiligen Methode.
  • Für jedes Lied erstellen wir ein Listenelement und erstellen den Text, der für jedes Element angezeigt wird. Der erste Teil ist der Liedschlüssel, da jedes Lied ein Hash ist und der Schlüssel für diesen Hash der Name des Songs ist.
  • Dann setzen wir einen Link zu der Löschaktion, wo der Song gelöscht werden kann. Für die URL verwenden wir am Ende eine Abfragezeichenfolge, um die Löschaktion mitzuteilen, welcher Song gelöscht werden muss.
  • Schließlich haben wir eine Bestätigungsnachricht, um den Benutzer zu warnen, bevor er das Lied tatsächlich löscht.
 if (params [: song]) AWS :: S3 :: S3Object.find (params [: song], BUCKET) .delete redirect_to root_path else render: text => "Es wurde kein Song zum Löschen gefunden!" Ende
  • Zuerst prüfen wir, ob der Song-Parameter angegeben wurde.
  • Wenn dies der Fall war, verwenden wir die find-Methode, um das Objekt abzurufen, das dieses Lied darstellt.
  • Zum Schluss verwenden wir die delete-Methode, um sie aus Amazon S3 zu löschen.
  • Danach müssen wir den Benutzer auf eine neue Seite umleiten, da die Löschaktion keine Ansicht hat. Wenn der Song-Parameter jedoch nie angegeben wurde, wird nur der Text "Kein Song zum Löschen gefunden!".

Lassen Sie den Benutzer Musik hochladen

Jetzt müssen wir den Benutzer tatsächlich Musik hochladen lassen, da dies eine der Hauptfunktionen für diese Anwendung war. Zunächst erstellen wir ein einfaches Formular, mit dem der Benutzer eine hochzuladende Datei auswählen kann. Das können wir so machen:

 

Laden Sie eine neue MP3 hoch:

<%= form_tag upload_path, :method => "post",: multipart => true do%> <%= file_field_tag "mp3file" %> <%= submit_tag "Upload" %> <% end %>

Wir erstellen ein Formular, das an die Upload-Aktion übermittelt wird. Hierbei handelt es sich um die Aktion, die den Upload auf Amazon S3 ausführt. Wir verwenden Post und Multipart, weil wir Dateien einreichen. Abgesehen davon ist dieses Formular sehr einfach und leicht zu verstehen, sodass wir uns jetzt mit der Implementierung des Controller-Teils dieser Aktion beschäftigen können.


Senden der Datei an Amazon S3

Wir müssen die übergebene Datei nehmen und ein neues S3-Objekt erstellen, das in der Upload-Aktion ausgeführt wird. Wir können das mit dieser Codezeile machen:

 AWS :: S3 :: S3Object.store (sanitize_filename (params [: mp3file] .original_filename), params [: mp3file] .read, BUCKET,: access =>: public_read)

In dieser einen Zeile ist viel los, daher werde ich jeden Teil einzeln erklären.

Wie üblich greifen wir auf die AWS :: S3 :: S3Object um mit Objekten auf Amazon S3 zu interagieren.

Wir nehmen das Geschäft Befehl, um Dateien tatsächlich in S3 hochzuladen. Der erste Parameter gibt an, wie die Datei aufgerufen werden soll. Wir nehmen das original_filename Parameter der hochgeladenen Datei, damit der Name gleich bleibt. Wie für die sanitize_filename Methode, die im nächsten Abschnitt erläutert wird. Der zweite Parameter sind die tatsächlichen Dateidaten, die beim Aufruf der Lesemethode für die hochgeladene Datei erhalten werden. Der dritte Parameter gibt den zu verwendenden Bereich an, und der vierte bestimmt, wer auf die Datei zugreifen kann. Da wir möchten, dass jeder die Datei lesen kann (einschließlich Herunterladen), geben wir den Zugriff als an : public_read.

Das sanitize_filename method ist eine Methode, die von vielen Leuten und Plugins verwendet wurde, wie z attachment_fu, und es wird verwendet, um ein Problem mit dem Internet Explorer zu lösen (schockierend, nicht wahr?). Anstatt uns beim Aufrufen der Methode original_filename nur den Namen der Datei anzugeben, gibt IE den gesamten Pfad zur Datei zurück. Zum Beispiel, wenn die Datei, die wir hochladen wollten, aufgerufen wurde mysong.mp3, es würde uns stattdessen geben C: \ Schienen \ mp3app \ mysong.mp3 wenn wir anrufen original_filename. Wir können dies beheben, indem Sie den folgenden Code am Ende des Controllers hinzufügen:

 private def sanitize_filename (Dateiname) just_filename = File.basename (Dateiname) just_filename.sub (/ [^ \ w \. \ -] /, '_') end

Der letzte Schritt beim Abschluss der Upload-Aktion besteht darin, einige Fehlerprüfungen und Routen hinzuzufügen. Die Art und Weise, wie Sie Fehler in Ruby überprüfen, ist mit a Start? Rettung? Ende Aussage. Beim Hochladen einer Datei kann vieles schief gehen. Wenn also eine Fehlerprüfung durchgeführt wird, kann der Benutzer keine Fehlermeldung sehen, die Rails automatisch generiert. Hier ist die modifizierte Version der Upload-Aktion:

 def upload begin AWS :: S3 :: S3Object.store (sanitize_filename (params [: mp3file] .original_filename), params [: mp3file] .read, BUCKET,: access =>: public_read) redirect_to root_path rescue render: text => " Das Upload-Ende konnte nicht abgeschlossen werden

Wenn ein Fehler auftritt, rendern wir nur einen Text, der den Benutzer darüber informiert. Obwohl dem Benutzer immer noch eine Fehlermeldung angezeigt wird, ist diese besser als eine riesige Liste von Code, der in einer von Rails generierten Fehlermeldung angezeigt wird.


Weiterleiten unserer Anwendung

Sie haben vielleicht bemerkt, dass es in dem Code, den wir bisher geschrieben haben, oftmals so etwas wie upload_path wurde anstelle eines Controllers und einer Aktion verwendet. Wir können dies aufgrund einer Datei namens routes.rb tun. Dies teilt unserer Anwendung mit, auf welche URLs in unserer Anwendung zugegriffen werden kann. Wir geben auch bestimmte Pfade an, um die Aktualisierung des Codes zu erleichtern. So können Sie die Pfade benennen, die unsere Mp3app verwenden wird:

 Übereinstimmung mit "songs / upload",: as => "upload" Übereinstimmung mit "songs / delete",: as => "delete" root: to => "songs # index"

Die Match-Methode gibt einen Pfad an, wie Lieder / Upload, und gib ihm einen Namen, upload_path. Dieser Name wird mit angegeben : as => "name" als zweiter Parameter der Match-Methode. Schließlich gibt die Root-Methode an, welche Aktion die Root-Aktion ist, die in einer statischen HTML-basierten Website ähnlich wie index.html wirkt.


Die abgeschlossene Upload-Aktion

Nun ist die Implementierung der Funktionalität der Upload-Aktion abgeschlossen. Hier ist der endgültige Code für die songs_controller.rb Datei bisher:

 Klasse SongsController < ApplicationController def index @songs = AWS::S3::Bucket.find(BUCKET).objects end def upload begin AWS::S3::S3Object.store(sanitize_filename(params[:mp3file].original_filename), params[:mp3file].read, BUCKET, :access => : public_read) redirect_to root_path rescue render: text => "Upload konnte nicht abgeschlossen werden" end end def löschen if (params [: song]) AWS :: S3 :: S3Object.find (params [: song], BUCKET). delete redirect_to root_path else render: text => "Es wurde kein Song zum Löschen gefunden!" end end private def sanitize_filename (Dateiname) just_filename = File.basename (Dateiname) just_filename.sub (/ [^ \ w \. \ -] /, '_') end end

Und so sieht die Anwendung im Browser bisher aus.


Musik herunterladen

Bislang ist unsere Bewerbung weit fortgeschritten. Der Benutzer kann jetzt Musik hochladen, eine Liste der aktuell hochgeladenen Musik anzeigen und vorhandene Musik löschen. Jetzt haben wir eine letzte Kernfunktionalität, die implementiert werden muss. Dies bedeutet, dass der Benutzer diese Musik tatsächlich herunterladen kann. Wie zu Beginn dieses Lernprogramms angegeben, kann der Benutzer dies auf drei Arten tun:

  • streamen Sie es mit HTML5-Audio,
  • Laden Sie es über HTTP herunter und
  • Laden Sie es mit einer Torrent-Datei herunter.

Im Moment wird die Musikliste nur in einer ungeordneten Liste angezeigt. Da wir jedoch am Ende jeder Zeile drei weitere Links hinzufügen (einen für jede Download-Methode), ist es sinnvoller, eine Tabelle zum Organisieren der Liste zu verwenden. Ändern Sie die Indexansicht entsprechend dieser Änderung:

 

Laden Sie vorhandene MP3s herunter und löschen Sie sie

<% @songs.each do |song| %> <% end %>
<%= song.key %> <%= link_to "Delete", "songs/delete/?song=" + song.key, :confirm => 'Möchten Sie' + song.key + 'wirklich löschen?' %>
  • Zuerst aktualisieren wir den Header so, dass die Musik auch heruntergeladen werden kann.
  • Zweitens ändern wir die ungeordnete Liste in eine Tabelle und geben den Namen des Songs und den Download-Link selbst ein .

Jetzt können wir den Code hinzufügen, damit der Benutzer Musik herunterladen kann. Beginnen wir mit dem Herunterladen über HTTP, da dies am einfachsten zu implementieren ist.


Herunterladen über HTTP

Um über HTTP herunterzuladen, müssen wir nur ein neues hinzufügen zu unserer Tabelle mit einem Link zur MP3-Datei. Der aws-s3-gem verfügt über integrierte Methoden, mit denen wir die URL für eine Datei generieren können. Es empfiehlt sich jedoch, solche Hilfsmethoden in der Hilfsdatei für diesen Controller zu speichern. Da wir diese Methoden in der gesamten Anwendung verwenden (insbesondere wenn Sie sich dazu entscheiden, diese Anwendung selbst zu erweitern), werden die Hilfemethoden in der Datei application_helper.rb. So erhalten Sie die URL:

 def download_url_for (song_key) AWS :: S3 :: S3Object.url_for (song_key, BUCKET,: authenticated => false) enden

Diese Methode akzeptiert nur einen Parameter, den Namen des Songs. Damit wir uns daran erinnern können, dass der Name des Songs über song.key aufgerufen wird, rufen wir den Parameter auf song_key. Wie üblich greifen wir auf die AWS :: S3 :: S3Object Klasse für die Interaktion mit Amazon S3-Objekten. Das url_for Die Methode benötigt zwei Parameter, der dritte ist optional.

  • Der erste ist der Name der Datei, nach der Sie suchen.
  • Der zweite ist der Name des Buckets, in dem sich die Datei befindet.
  • Schließlich wird mit dem dritten Parameter eine URL angegeben, die nicht abläuft. Wenn wir nicht angegeben haben : authenticated => false, die URLs würden alle in 5 Minuten ablaufen (standardmäßig).
 <%= link_to "Download", download_url_for(song.key) %>

Diese wechselt zwischen dem Namen des Songs und dem Lösch-Link (dies ist jedoch eine persönliche Präferenz, sodass Sie die Links in beliebiger Reihenfolge auswählen können).


Herunterladen über Bit Torrent

Das Herunterladen von Dateien von Amazon S3 über Bit Torrent ist dem Herunterladen über HTTP sehr ähnlich. In der Tat besteht der einzige Unterschied zwischen den beiden Download-URLs darin, dass der Torrent einen Torrent am Ende hat. Daher fügt unsere Hilfsmethode zum Generieren der Torrent-URL einfach am Ende der HTTP-URL Flutorrent hinzu. So würden Sie das machen:

 def torrent_url_for (song_key) download_url_for (song_key) + "? torrent" ende

Jetzt müssen wir nur noch einen hinzufügen zu unserem Tisch:

 <%= link_to "Torrent", torrent_url_for(song.key) %>

Streaming mit HTML5-Audio

Das Streamen der Songs über HTML5-Audio ist etwas schwieriger als das Herunterladen des Songs. Beginnen wir also mit dem einfachen Teil: dem dafür. Es wird jedoch einige Unterschiede zu den Links geben, die wir für HTTP und Bit Torrent hinzugefügt haben.

  • Zunächst müssen wir diesen Link identifizieren können, um den Link hinzufügen zu können
  • Zweitens brauchen wir einen Weg, um die Quelle des MP3s zu ermitteln, der für das verwendet werden soll tag, also geben wir ihm einfach die gleiche URL wie beim HTTP-Download. Dies wird auch als Fallback für Browser mit deaktiviertem Javascript dienen, da wir JavaScript verwenden, um das hinzuzufügen Tag auf der Seite.

Hier ist der Code zum Erzeugen des Links:

 <%= link_to "HTML5 Audio", download_url_for(song.key), :class => "html5"%>

Jetzt müssen wir mit dem Javascript arbeiten, um den Audio-Tag der Seite hinzuzufügen, wenn dieser Link angeklickt wird. Zu diesem Zweck verwenden wir eine Technik, die der von Jeffrey Way in seinem Tutorial verwendeten Methode, dem HTML 5 Audio Element, ähnelt. Der erste Schritt ist ein paar Dinge zu unseren Ansichtsdateien hinzuzufügen. In unserer layout / application.html.erb Datei, wir müssen die neueste Version von jQuery enthalten, da dies die Javascript-Bibliothek ist, die wir verwenden werden. Hier ist der Code, der direkt vor der ersten Javascript-Zeile eingefügt werden muss:

 <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" %>

Dann, Ändern Sie den ersten Parameter für das ursprüngliche Include-Tag von: Standardeinstellungen in application.js, Wir speichern unseren Javascript-Code, und die anderen Standard-JavaScript-Dateien sind nicht erforderlich. Als Nächstes müssen wir unserer index.html.erb-Ansicht einen Abschnitt hinzufügen, um das Audio-Tag einzufügen. Oben in dieser Ansicht müssen wir den folgenden Code einfügen:

 

Hören Sie eine MP3 mit HTML5-Audio

Im Anschluss an das HTML5-Design verwenden wir ein Abschnitts-Tag anstelle eines Div, um unseren Audio-Abschnitt zu erstellen.

Wir erhalten einen Verweis auf den Audioabschnitt und zwischenspeichern ihn in einer Variablen, was als Best Practice gilt. Als Nächstes müssen wir unseren Links mit der Klasse html 5 einen Click-Ereignishandler hinzufügen. Wenn der Event-Handler abläuft, müssen wir ein paar Dinge tun:

  • Zuerst müssen wir ein neues Audio-Tag erstellen und ihm einige Attribute wie Steuerelemente zuweisen.
  • Dann müssen wir das Quell-Tag hinzufügen, damit es tatsächlich weiß, was gespielt werden soll.
  • Schließlich müssen wir den HTML-Code im Audioabschnitt durch den neuen Audio-Tag ersetzen und false zurückgeben, damit die normale Aktion des Links nicht durchläuft, was den Song herunterladen würde. So können Sie das alles zusammenstellen:
 $ (document) .ready (Funktion () var audioSection = $ ('section # audio'); $ ('a.html5'). click (Funktion () var audio = $ ('

Da es sich bei diesem Tutorial um Ruby on Rails und nicht um JavaScript handelt, werde ich nicht detailliert auf die Funktionsweise dieses Codes eingehen. Der Code ist jedoch ziemlich einfach, daher sollte es Ihnen leicht fallen, dies herauszufinden. Beachten Sie, dass dies nur in Browsern funktioniert, die HTML5 unterstützen und MP3s als gültige Quellen für Audiotags unterstützen. Für die meisten Browser unterstützt die neueste Version diesen HTML 5-Code, ältere Browser unterstützen dies jedoch nicht.


Abgeschlossene Indexansicht

Wir haben nun alle Kernfunktionen für diese Anwendung fertiggestellt. Der Benutzer kann MP3-Dateien auf verschiedene Arten hochladen, herunterladen und löschen, darunter HTML5-Audio, HTTP-Downloads und Bit Torrent. So sollte die Indexansicht an dieser Stelle aussehen:

 

Hören Sie eine MP3 mit HTML5-Audio

Laden Sie eine neue MP3 hoch

<%= form_tag upload_path, :method => "post",: multipart => true do%> <%= file_field_tag "mp3file" %> <%= submit_tag "Upload" %> <% end %>

Laden Sie vorhandene MP3s herunter und löschen Sie sie

<% @songs.each do |song| %> <% end %>
<%= song.key %> <%= link_to "HTML5 Audio", download_url_for(song.key), :class => "html5"%> <%= link_to "Download", download_url_for(song.key) %> <%= link_to "Torrent", torrent_url_for(song.key) %> <%= link_to "Delete", "songs/delete/?song=" + song.key, :confirm => 'Möchten Sie' + song.key + 'wirklich löschen?' %>

Wenn Sie dies noch nicht getan haben, sollten Sie diesen Code ausführen und für sich selbst ausprobieren. Sie können dies tun, indem Sie den Befehl ausführen: Schienen s. Auch wenn wir die Kernfunktionalität für diese Anwendung fertiggestellt haben, gibt es noch einige Dinge zu tun, z. B. das Gestalten der Seite. Lass uns das jetzt machen.


Gestaltung der Anwendung

Zuerst müssen Sie die Seite in einen Container einpacken, damit wir sie zentrieren können. Alles, was wir tun müssen, ist ein div mit einer ID des Containers um die Yield-Anweisung in der Layoutdatei zu platzieren, so dass es ungefähr so ​​aussieht:

 
<%= yield %>

Als nächstes verwenden wir das Styling von Ryan Bates, nifty_generators, um unserer Anwendung etwas grundlegendes Styling zu geben. Hier ist das CSS, das wir von diesem Edelstein verwenden werden:

 #container width: 75%; Marge: 0 auto; Hintergrundfarbe: #FFF; Polsterung: 20px 40px; Rand: fest 1px schwarz; Rand oben: 20px;  body Hintergrundfarbe: # 4B7399; Schriftfamilie: Verdana, Helvetica, Arial; Schriftgröße: 14px;  .clear clear: beide; Höhe: 0; Überlauf versteckt; 

Jetzt werden wir die Indexansicht bearbeiten. Als Erstes müssen wir die Seite in drei Abschnitte unterteilen. Diese Abschnitte werden eine Kopfzeile, ein Hauptabschnitt und eine Seitenleiste sein. Fügen Sie oben auf der Seite eine einfache Kopfzeile hinzu:

  

Meine erste Musik-Streaming-Anwendung

Als Nächstes teilen wir die Seite in einen Hauptbereich und einen Seitenleistenbereich auf. Unser Hauptbereich besteht aus der Liste der Titel, während die Seitenleiste das HTML5-Audio und das Upload-Formular enthält. So ändern wir den Code:

 

HTML5-Audio

Derzeit wird kein Titel abgespielt.

Einen Song hochladen

<%= form_tag upload_path, :method => "post",: multipart => true do%> <%= file_field_tag "mp3file" %>
<%= submit_tag "Upload" %> <% end %>

Songs herunterladen / löschen

<% @songs.each do |song| %> <% end %>
<%= song.key %> <%= link_to "HTML5 Audio", download_url_for(song.key), :class => "html5"%> <%= link_to "Download", download_url_for(song.key) %> <%= link_to "Torrent", torrent_url_for(song.key) %> <%= link_to "Delete", "songs/delete/?song=" + song.key, :confirm => 'Möchten Sie' + song.key + 'wirklich löschen?' %>

Da wir Floats verwenden werden, um diese Seite zu entwerfen, müssen Sie die Floats vorher und danach löschen, um sicherzustellen, dass das Layout nicht durcheinander gerät. Fügen wir nun das CSS hinzu, um das Layout dieser Abschnitte anzupassen:

 # Seitenleiste Breite: 30%; Schwimmer: links;  #main width: 70%; Schwimmer: links;  a, a: besuchte color: # 00f; Textdekoration: keine;  a: hover Textdekoration: Unterstreichung;  td padding: 5px; 

Die Seitenleiste beträgt 30% der Seite und der Hauptbereich beträgt 70% der Seite. Darüber hinaus gibt es CSS, um die Unterstreichung von den Links zu entfernen, es sei denn, der Mauszeiger befindet sich über dem Link Tags, damit es nicht so eng aussieht. Am Ende ist dies wirklich das einzige CSS, das wir benötigen, um der Seite ein grundlegendes Layout zu geben. Sie können der Anwendung so viel Stil hinzufügen, wie Sie möchten, denn es gibt durchaus Möglichkeiten, diese Anwendung schöner aussehen zu lassen.


Fazit

Hoffentlich haben Sie jetzt ein gutes Verständnis dafür, wie Sie mit Amazon S3 von Ihrer Ruby on Rails-Anwendung aus interagieren. Mit dem aws-s3 Gem, dies ist sehr einfach. Das Hinzufügen zu einer vorhandenen Anwendung wird sehr wenig Zeit in Anspruch nehmen. Fühlen Sie sich frei, diese Anwendung auf beliebige Weise zu ändern, um zu sehen, ob Sie sie auf irgendeine Weise verbessern können. Vergessen Sie nicht, Ihre eigenen Amazon S3-Anmeldeinformationen und die Bucket-Konstante in die application.rb Datei, sonst startet die Anwendung nicht!

Ich bin mir sicher, dass Sie für diejenigen unter Ihnen, die Ruby on Rails-Experten sind, einen Weg finden können, diese Anwendung noch weiter zu optimieren. Darüber hinaus ist es hilfreich, alle Optimierungen, die Sie im Kommentarbereich vornehmen, mitzuteilen, damit die Leser dieses Tutorial noch besser nutzen können.