2016-07-23 11 views
0

Ich versuche, Audio-Dateien mit einem node.js Server zu dienen. Das Problem ist, ich möchte in der Lage sein, irgendeine Audiodatei in meinem Computer zu bekommen, aber ich weiß nicht, wie man Audioelemente in html herstellt, um mit Verzeichnissen über dem Server zu arbeiten. Es gibt this Frage, die ich gefunden habe, aber da die Dateien, die ich immer ändern können will, es nicht wirklich geholfen hat.Wie bekomme ich Dateien über dem Server-Verzeichnis in Node.js

Das Projekt ist im Grunde ein Media Player im Browser. Es wird auf LAN sein, so dass alles im Computer zu bedienen kein Problem ist. Ich verwende bereits Express 'statische Funktion für Bilder, Javascript und CSS. Die Anwendung führt Pfad, Name und andere Informationen unter Verwendung nedb.

+1

Es gibt zu wenig Informationen darüber, wie Ihre Anwendung jetzt geschrieben ist, um antworten zu können. Könnten Sie etwas vorhandenen Code teilen? –

+0

Uhm, welchen Code muss ich teilen? Ich meine, ich kann nicht alles posten, aber ich kann posten, wenn es etwas Bestimmtes gibt. Ich habe versucht, es so gut wie möglich zu erklären. –

Antwort

1

Als Erstes müssen Sie verstehen, dass node.js standardmäßig keine Dateien bereitstellt. Daher müssen Sie jede einzelne Anforderung entweder manuell codieren, sodass die Anforderung /foo Inhalt aus einer bestimmten Datei oder einem bestimmten Code generiert. Oder Sie müssen eine Reihe von Zuordnungen erstellen, wobei /content/foo Ihrem Server mitteilt, dass er ein entsprechendes Verzeichnis auf Ihrem Server lesen soll, z. B. /myservercontent/foo.

Und es gibt verschiedene Tools, die Ihnen helfen, diese Zuordnung für ganze Verzeichnishierarchien von Dateien (z. B. express.static()) zu erstellen. Aber jede Zuordnung wie diese hat eine explizite Wurzel, bei der alle Anfragen relativ zu einer Wurzel sind. Sie können festlegen, wo dieser Root auf Ihrem Server sein soll. Es kann sogar das Root-Verzeichnis Ihres Servers sein (obwohl das aus verschiedenen Gründen nie empfohlen wird). Normalerweise wird dieser Stamm auf ein übergeordnetes Verzeichnis auf Ihrer Festplatte gesetzt, das NUR öffentlichen Webinhalt unterhalb dieses übergeordneten Verzeichnisses enthält. Dies ist so, dass Sie NIEMALS eine Situation schaffen, in der ein beliebiger Web-Benutzer Zugang zu Dateien auf Ihrem System erhalten kann, die Sie nicht öffentlich haben möchten (wie Ihre HTTP-Zertifikate, Datenbanken, Server-Code, Passwort-Dateien usw.) .

Alles in allem, node.js erlaubt Ihnen, so ziemlich alles zu tun, was Sie wollen. Wenn Sie Zugriff auf eine zufällige Datei auf Ihrer Festplatte an einem beliebigen Ort geben möchten (etwas, das ich nie empfehlen würde), können Sie einfach node.js codieren, um das zu tun. Es gibt mehrere Möglichkeiten, dies zu erreichen. Eine einfache wäre, eine Route zu konstruieren, die einen Abfrageparameter akzeptiert, wobei der Abfrageparameter den Pfad zu der gewünschten Datei angibt und dann diese Routenkennung diese Datei lesen und zurückgeben lässt. Dies ist eine klaffende Sicherheitslücke, die groß genug ist, um einen Lastwagen durchzufahren, also würde ich das niemals empfehlen.

Stattdessen sollten Sie alle Dateien, die Sie über Ihren Server zur Verfügung stellen möchten, in einer sicheren Verzeichnishierarchie sammeln und dann den Zugriff auf Dateien in dieser bestimmten Verzeichnishierarchie zulassen auf deiner Festplatte.


Nachdem Sie nun ein wenig mehr über haben erklärt, was Sie tun, ist hier eine Idee:

  1. Scan der lokalen Festplatte alle Audiodateien zu identifizieren, die Sie denken, sind sicher Aktie. Sei sehr, sehr vorsichtig, was du teilen willst, da Fehler hier große Sicherheitslöcher öffnen können. Sie müssen die Sicherheitsrisiken von dem, was Sie hier tun, bewerten, da wir den vollen Kontext nicht verstehen.

  2. Wenn Sie diese Liste von Audiodateien sammeln, speichern Sie die Liste in einer Art von Datenspeicher, den Ihr Server verwendet, damit Sie zu einem späteren Zeitpunkt schnell auf die Liste zugreifen können. Ich schlage vor, dass Sie für jede Audiodatei eine eindeutige ID erstellen, auf die Sie in Zukunft leichter zugreifen können.

  3. Sie können Ihrem Remote-Benutzer dann eine Liste dieser Audiodateien anbieten, und sie können eine auswählen.Die ausgewählte Audiodatei kann dann als Teil einer Anforderung zum Abspielen einer bestimmten Audiodatei an den Server gesendet werden. Ich würde vorschlagen, dass Dateien nur per ID angefordert werden sollten (aus Sicherheitsgründen), obwohl Ihre Benutzerschnittstelle möglicherweise den ursprünglichen Pfadnamen anzeigt, wenn dies wichtig oder relevant ist.

  4. Wenn Ihr Server eine Anforderung zum Abspielen einer Audiodatei mit einer bestimmten ID empfängt, kann er in dessen Datenspeicher nachlesen, welche Audiodatei die mit der spezifischen ID ist. Dies ist ein wichtiger Schritt, da der Client gezwungen ist, die Datei nach ID (nicht nach Pfad) anzufordern, sodass der Client nur Audiodateien anfordern kann, die zuvor gescannt wurden und deren Veröffentlichung für sicher erachtet wurde. Es gibt keine Sicherheitslücken, bei denen ein Remote-Client eine andere Datei anfordern könnte, die Sie nicht freigeben möchten.

  5. Sobald Ihr Server im Datenspeicher nach der Audiodatei mit dieser bestimmten ID sucht, kann er den lokalen Pfad aus dem Datenspeicher abrufen und die Audiodatei lesen und an die Gegenstelle senden/streamen Klient.


Als Beispiel in Schritt 3 und 4, dann kann Client eine URL senden, die wie folgt aussieht:

http://someserver/play/5934902

, dass eine Anfrage würde die Audiodatei abzuspielen mit einer ID von 5934902. Ihr Server hätte dann einen Routen-Handler für /play/:id, der die ID verwenden würde, um dann die Schritte 4 und 5 auszuführen.

+0

Ich habe die Frage bearbeitet, um mehr Informationen zu geben. Ich verstehe vollkommen, was Sie über Sicherheit sagen. Aber diese App führt einen Scan auf der Festplatte durch, holt alle Audiodatei-Informationen und bedient sie wie ein Media-Player. Und es wird nur im LAN laufen, so dass Sicherheit für mich nicht wirklich ein Problem ist. Bitte korrigieren Sie mich, wenn ich falsch liege. –

+0

@RuralBayhan - Ich habe meiner Antwort zu Audiodateien mehr hinzugefügt. – jfriend00

+0

Nun, das ist tatsächlich, was ich tat, aber ich bekomme den letzten Teil nicht. Wenn ich versuche, sagt die Konsole: "Lokale Ressource darf nicht geladen werden". Meinst du, ich brauche etwas anderes als das Audioelement? Ich dachte daran, socket.io zu verwenden und Pfadinformationen an Frontend js zu senden, um den HTML-Code zu ändern. –

Verwandte Themen