JavaScript: Wie speichere ich einen FileLink in der Datenbank?

Kokujou

Lieutenant
Registriert
Dez. 2017
Beiträge
948
Hey Leute!

ich hab gerade ein kleines Privates Projekt gestartet... es läuft nur lokal. Eine Art Datenbank für Filme und Serien.
Ich würde gerne über diese Homepage auch Streams von lokalen Dateien starten können...

sicher kennt ihr alle den file input, den gibt es ja auch mit dem keyword webkitdirectory. Letzteres benutze ich um den übergeordneten Ordner zu parsen und alle serien in einem Ordner zu parsen.

Nun das Problem... Ich bekomme den Dateinamen und ich bekomme den relativen Pfad, aber ich bekomme nicht den vollen Pfad! Aber es wäre ja wirklich bescheuert auf meinem lokalen Computer die Dateien tatsächlich hochzuladen und damit zu klonen.

Also meine Frage: Wie speichere ich mit JavaScript (ob mit File Input oder nicht) einen Link auf das lokale Dateisystem in der Datenbank, damit ich jederzeit diesen Link lesen und einen Stream starten kann?

Ich hab ja schon rausgekriegt wie ich einen blob link für diese Datei erstellen kann... aber leider ist das nur Temporär und er überlebt keinen Browser Neustart....

ist das überhaupt möglich?

PS: Ich nutze Vanilla JS, ohne jede erweiterung, ohne Node, ohne alles.
 
Bin gespannt, würde darauf tippen, dass es (immer noch nicht) möglich ist. Generell würde ich reines JS gar nicht erst als Ansatz wählen für so ein Projekt, genau aus solchen Gründen. Vielleicht doch ein kleines bisschen node.js?
 
JS hat keinen Zugriff auf das echte Filesystem. Nur wenn du sagst jo ich wollte diese Datei hochladen, dann bekommt es Zugriff darauf.

Und auch nur in diesem Moment für die ausgewählten Datein.

Für dein vorhaben müsstest du ein framework nutzen wie z.b. electon das stellt dann auch filezugriffe bereit.

Oder einen lokalen Server betreiben ob selbst geschrieben oder nodejs ect.
 
Ich glaube, dass das aus Sicherheitsgründen gar nicht zulässig ist. Hätte JS einen ungehinderten Zugriff auf dein Dateisystem, ließe sich alleine daraus bereits einiges ableiten/spionieren/Unsinn treiben.

Tatsächlich war das vor vielen Jahren sogar der Fall. Das wurde dann erst später Stück für Stück so umgebaut, dass die JS-Anwendung eben keinen (echten) lokalen Pfad mehr bekommt. Ich gehe also davon aus, dass du hier in eine Sackgasse rennst.
 
aber sagmal... ihr sagt mit NodeJS ist das möglich. Wird NodeJS nicht auch zu JavaScript kompiliert? NodeJS ist doch nur eine Bibliothekssammlung für JavaScript oder hab ich da was falsch verstanden?
 
Mittels Node.JS kannst du einen Webserver bauen. Clientseitiges JS ist sehr begrenzt.
 
Ist vielleicht etwas blöde formuliert hier.
"Javascript, dass im Browser ausgeführt hat" vs "Javascript, was direkt auf dem Rechner ausgeführt wird" wäre passender.
Mit Option 1 hast du nur die Browser Sandbox und was die dir zu Verfügung stellt, mit einem NodeJS Server kannst du theoretisch erstmal jeden Mist auf dem Rechner machen.
 
  • Gefällt mir
Reaktionen: Burfi
verstehe... klingt nicht sehr erbaulich...
noch hab ich nicht viel vielleicht migriere ich ja...

wie wäre denn der NodeJS weg? welche Pakete brauch ich?
 
Ich würde einfach mal versuchen, einen Webserver (apache, nginx, whatsoever) in deinem "Medien" Verzeichniss laufen zu lassen. Dann brauchst du garkeinen Zugriff auf das lokale Dateisystem sondern hättest alle Dateien über den Webserver zur Verfügung.
 
naja n bisl dynamisch solls schon sein... außerdem hab ich 4 medien verzeichnisse XD
oder warens 6?

vielleicht ist javascript ja doch nicht die richtige Wahl und ich sollte auf Blazor migrieren...
 
nodejs war jetzt nur ein Vorschlag weil ich dachte, das hast du schon verwendet. Du bist doch C# entwickler oder hab ich das falsch im Kopf?
Das JS das du hast musst du eh 1:1 behalten, egal ob nodejs oder was anderes. Nimm doch einfach ein C# MVC framework oder so.
Ergänzung ()

Nachtrag: Natürlich gibt es auch reine Server-Side Lösungen wie Vaadim und evtl. auch Blazor (ka), da kannst du das JS sicherlich auch verwenden, ist dann aber nicht idiomatisch in dem Framework.
Viele Frameworks sind aber einfach MVC Frameworks u.ä. und kümmern sich um Server Side und liefern aber für den Client in erster Linie normales JS aus.
 
bin ich. aktuell wird von mir aber javascript verlangt und während ich nichts zutun habe guck ich mal was man so mit javascript machen kann...

aber wenn das so limitiert ist steig ich vielleicht doch auf Blazor um....

JavaScript ist halt sehr light weight und darum sehr verlockend. wenn der File Zugriff reichen würde wäre ja alles ok... aber meh >.< auf Arbeit haben wir gerade ein system etabliert bei dem unser gesamtes Frontend wirklich nur über statische Files und ohne jeden Build Prozess funktioniert, das find ich recht cool,
 
@Kokujou
Wenn ich das richtig verstanden habe, willst Du auf einen Link im Browser klicken und dann soll eine lokale Datei geöffnet werden?

Dies geht so direkt nicht. Es ist auch ein Sicherheitsfeature, welches man nur umgehen kann. Früher hat man das mit ActiveX oder Native Messaging gemacht, aber beides ist tot und wird nicht mehr von modernen Browsern unterstützt oder so umgesetzt.

Die Lösungen dazu sind folgende:
  1. Du baust mit C# und dotNet eine Applikation, welche durch einen Url Handler ausgeführt wird und dann dadurch eine lokale Drittapplikation startet. (Funktioniert dann wie MS Teams oder Spotify öffnen)
    Dazu musst Du einen neuen eigenen Url Handler in der Windows Registry eintragen, damit es diesen Url Handler gibt und auch dieser als vertrauenswürdig gilt.
    Der Url Handler verweist, dann mit einer eventuellen Parameterübergabe auf Deine C#-Applikation.
    Die C#-Applikation verarbeitet den Url Handler (und die Parameter) und kann dann die Drittapplikation starten (Dazu nutzt man dann die C# eigene Klasse: Process).

  2. Du baust Dir eine Service-Api (node.js, Java, Php oder etc), welchen Du per REST oder direkt im JavaScript-Code (injection) ausführst.
    Der Service kann dann auf lokale Daten zugreifen und auch ausführen, da dieser die Rechte hat auf den lokalen Host zuzugreifen.

  3. Einen Datei-Webserver nutzen, der Dir diese Funktion zur Verfügung stellt.

Es ist machbar, aber man muss wissen wie.
 
  • Gefällt mir
Reaktionen: BeBur
Browser begrenzen den Zugriff von Websites auf den Computer, aus Sicherheitsgründen. Ist also ein "Browser-Problem". Nodejs hätte diese Einschänkung logischerweise nicht. Nicht dass es da ein Missverständnis gibt.

Ich würd vermutlich einfach ne QT Applikation schreiben. Browser sind Browser, das Leute anfangen, alles damit machen zu wollen macht es noch nicht sinnvoll.
 
  • Gefällt mir
Reaktionen: 3252
omg, 4 Directories in einem einzelnen Webserver? Und dann auch noch "dynamisch"?

Was sind denn deine genauen Anforderungen? Wenn es nur darum geht, dass du die Videos im Browser abspielen willst, dann klatscht du deine Verzeichnisse irgendwie in den Webserver rein (localhost/verzeichnis1, localhost/verzeichnis2, ...).

Dann baust du dir ein Javascript, welches die directory Indexes läd, parsed und dann daraus ein passendes HTML rendert.
Im HTML hast du dann für die Videos HTML5 Video Objekte mit der passenden URL, ist doch kein Hexenwerk?

Sobald ein neues Video dazukommt, siehst du das direkt im Apache Index und dein Javascript greift das bei nem Reload auf.
 
  • Gefällt mir
Reaktionen: netzgestaltung und BeBur
Kokujou schrieb:
aber wenn das so limitiert ist steig ich vielleicht doch auf Blazor um....
Afaik: Du hast dann entweder Blazor auf jedem einzelnen Target für das Du kompiliert hast (was voraussetzt das es unterstützt wird) oder einen Server der die App ausführt und ihre Ausgabe vorgerendert zum Ausgabegerät schickt. (was afaik sehr schlecht über die Anzahl der Clients skaliert). Das ganze mit einer Technik die gerade erst erfunden wurde und deren langfristige Unterstützung noch offen ist.

Kann man machen. Man kann sich auch eine rostige Schraube ins Knie jagen und anhand der Eindringtiefe den Schmerz regulieren.
 
deveth0 schrieb:
omg, 4 Directories in einem einzelnen Webserver? Und dann auch noch "dynamisch"?

Was sind denn deine genauen Anforderungen? Wenn es nur darum geht, dass du die Videos im Browser abspielen willst, dann klatscht du deine Verzeichnisse irgendwie in den Webserver rein (localhost/verzeichnis1, localhost/verzeichnis2, ...).

Dann baust du dir ein Javascript, welches die directory Indexes läd, parsed und dann daraus ein passendes HTML rendert.
Im HTML hast du dann für die Videos HTML5 Video Objekte mit der passenden URL, ist doch kein Hexenwerk?

Sobald ein neues Video dazukommt, siehst du das direkt im Apache Index und dein Javascript greift das bei nem Reload auf.
was ich erreichen will ist ne Art Homepage auf der man neue Medien dynamisch erstellen und zum streamen "hochladen" kann, wobei ich letzteres fürs erste nur mocken möchte.

stell es dir ein bischen vor wie proxer.me nur mit meiner eigenen und fürst erste lokal laufenden Medien datenbank. ich möchte also auf keinen Fall meine Medien-Ordner in den Webserver reinpappen.

z.B. hab ich aktuell ne Import funktion. Dort wähle ich einen Ordner aus. Der wird geparset und hat 1 oder maximal 2 Unterordner. Level 1 ist der Name des Mediums, Level 2 ist dann sowas wie Staffel 1 / Teil 1, whatever. daraus erstell ich dann ein Grundgerüst. Und da würde ich dann schon gerne sämtliche Dateien laden und in einer Batch-Creation Art schonmal sämtliche Dateien zum Streaming bereitstellen. Dann hab ich ne Liste von Filmen und Serien, denen ich dann eigenschaften wie Genre, Bewertung und Release-Datum hinzufügen kann
 
Der Server kennt die Dateistruktur des Browsers nicht und der Browsers nicht die vom Server. Kann man alles irgendwie umgehen, ist es besonders schön oder sinnvoll oder verhältnismäßig? Nein. Der Server kann die Infos über sich natürlich mitschicken, aber z.B. das native Dateiauswahlsystem des Browsers kann man dann vorraussichtlich nicht benutzen.

Ich würde daher einfach ein reguläres Programm schreiben.

Die sinnvolle Alternative besteht darin, alle deine Dateien vom Browser in deine Web-App hochzuladen, dann von da abzurufen und die ursprünglichen Dateien zu löschen. Wenn du die Dateien aber so wie sie sind und da wo sie sind verwenden willst, dann halt ne richtige App.
 
BeBur schrieb:
Der Server kennt die Dateistruktur des Browsers nicht und der Browsers nicht die vom Server. Kann man alles irgendwie umgehen, ist es besonders schön oder sinnvoll oder verhältnismäßig? Nein. Der Server kann die Infos über sich natürlich mitschicken, aber z.B. das native Dateiauswahlsystem des Browsers kann man dann vorraussichtlich nicht benutzen.

Ich würde daher einfach ein reguläres Programm schreiben.
schade, aber klingt richtig... dann werd ich mir wohl was anderes einfallen lassen müssen.... tortzdem danke für all die tollen Antworten!
 
um das nochmal zu erweitern... da es ja nur als Mock gedacht ist für den lokalen betrieb hab ich jetzt nach dem Ordner auswählen einen Dialog öffnen lassen. Dieser Dialog fordert einen auf den kompletten pfad anzugeben, wozu man ja nur im Fenster die URL leiste anklicken und den text kopieren muss...

dann kann ich daraus nen backend request machen und mir auf die Art den Pfad zusammenschustern. ist zwar nicht SO sexy, aber immer noch besser als jedes File händisch reinzuschreiben >.<

das einzig nervige ist jetzt, dass man die dateien zwar mit nem REST call ans frontend senden kann ohne eine Kopie davon herzustellen, aber leider Gottes unterstützt Firefox kein MKV >.>

aber das ist wieder ein Thema für einen anderen Post
 
Zurück
Oben