Wie kann ich einen Link zu einer lokalen Datei auf einer lokal ausgeführten Webseite erstellen?

155

Ich hätte gerne eine HTML-Datei, die bestimmte Dateien auf meiner Festplatte verteilt. Zum Beispiel habe ich zwei Dateien, auf die ich verlinken würde:

  • C:\Programs\sort.mw
  • C:\Videos\lecture.mp4

Das Problem ist, dass die Links als Verknüpfung zur Datei dienen sollen. Ich habe folgendes versucht:

<a href="C:\Programs\sort.mw">Link 1</a>
<a href="C:\Videos\lecture.mp4">Link 2</a>

... aber der erste Link macht nichts und der zweite Link öffnet die Datei in Chrome, nicht in VLC.

Meine Fragen sind:

  1. Gibt es eine Möglichkeit, mein HTML anzupassen, um die Links als Verknüpfungen zu den Dateien zu behandeln?

  2. Wenn es keine Möglichkeit gibt, den HTML-Code anzupassen, gibt es andere Möglichkeiten, um eine saubere Verknüpfung zu Dateien herzustellen, die auf der Festplatte verteilt sind?

Auf meinem Computer läuft Windows 7 und mein Webbrowser ist Chrome.

Brian Fitzpatrick
quelle

Antworten:

259

Sie müssen das file:///Protokoll verwenden (ja, das sind drei Schrägstriche), wenn Sie eine Verknüpfung zu lokalen Dateien herstellen möchten.

<a href="file:///C:\Programs\sort.mw">Link 1</a>
<a href="file:///C:\Videos\lecture.mp4">Link 2</a>

Diese öffnen die Datei in Ihren lokalen Anwendungen niemals automatisch. Das ist aus Sicherheitsgründen, die ich im letzten Abschnitt behandeln werde. Wenn es geöffnet wird, wird es immer nur im Browser geöffnet. Wenn Ihr Browser die Datei anzeigen kann, wird er Sie andernfalls wahrscheinlich fragen, ob Sie die Datei herunterladen möchten.

Moderne Versionen vieler Browser (z. B. Firefox und Chrome) weigern sich, vom http-Protokoll zum Dateiprotokoll zu wechseln, um böswilliges Verhalten zu verhindern. Sie müssen Ihre Webseite lokal mithilfe des Dateiprotokolls öffnen, wenn Sie dies überhaupt tun möchten.

Warum bleibt es ohne stecken file:///?

Der erste Teil einer URL ist das Protokoll. Ein Protokoll besteht aus ein paar Buchstaben, dann einem Doppelpunkt und zwei Schrägstrichen. HTTP://und FTP://sind gültige Protokolle; C:/ist nicht und ich bin mir ziemlich sicher, dass es nicht einmal richtig einem ähnelt.

C:/ist auch keine gültige Webadresse. Der Browser könnte davon ausgehen, dass http://c/ein leerer Port angegeben ist, aber das wird fehlschlagen.

Ihr Browser geht möglicherweise nicht davon aus, dass er sich auf eine lokale Datei bezieht. Es gibt wenig Grund, diese Annahme zu treffen, da öffentliche Websites normalerweise nicht versuchen, auf die lokalen Dateien der Menschen zu verlinken.

Wenn Sie also auf lokale Dateien zugreifen möchten, weisen Sie sie an, das Dateiprotokoll zu verwenden.

Warum drei Schrägstriche?

Weil es Teil des Datei-URI-Schemas ist . Sie haben die Möglichkeit, nach den ersten beiden Schrägstrichen einen Host anzugeben. Wenn Sie die Angabe eines Hosts überspringen, wird lediglich davon ausgegangen, dass Sie auf eine Datei auf Ihrem eigenen PC verweisen. Dies bedeutet, file:///C:/etcist eine Abkürzung für file://localhost/C:/etc.

Diese Dateien werden weiterhin in Ihrem Browser geöffnet und das ist gut so

Ihr Browser reagiert auf diese Dateien genauso wie überall im Internet auf dieselbe Datei. Diese Dateien werden in Ihrem Standard-Dateihandler (z. B. MS Word oder VLC Media Player) nicht geöffnet, und Sie können den Datei-Explorer nicht bitten, den Speicherort der Datei zu öffnen.

Dies ist eine sehr gute Sache für Ihre Sicherheit.

Websites in Ihrem Browser können nicht sehr gut mit Ihrem Betriebssystem interagieren. Wenn ein guter Standort Ihrer Maschine offen sagen konnte lecture.mp4 in vlc.exe , eine bösartige Site könnte es zu offen sagen virus.bat in CMD.exe . Oder es könnte einfach Ihren Computer anweisen, einige Uninstall.exe- Dateien auszuführen oder den Datei-Explorer millionenfach zu öffnen.

Dies mag für Sie nicht bequem sein, aber die HTML- und Browsersicherheit wurde nicht wirklich für das entwickelt, was Sie tun. Wenn Sie Vorlesung.mp4 in VLC.exe öffnen möchten, sollten Sie stattdessen eine Desktop-Anwendung schreiben.

Doppelgrün
quelle
1
Danke Jonathan. Wissen Sie, ob es eine Möglichkeit gibt, alternativ "Datei im Ordner anzeigen"?
Brian Fitzpatrick
7
@Brian Ihr Browser kann auf diese Weise nicht mit Ihrem Betriebssystem interagieren, und Sie sollten äußerst froh sein, dass dies nicht möglich ist.
Doppelgreener
23
Scheint, als würde Chrome ohnehin keine lokalen Dateien mit dem Protokoll file: /// herunterladen (was Ihnen einen Not allowed to load local resourceFehler gibt)
Loupax
1
Ich möchte einen Link wie diesen "file: /// .. \ .. \ sort.mw" geben, damit zwei Ordner zurückgehen und die Datei dort abgerufen wird. Weil wir die Word-Datei in Dropbox verwenden. Gibt es also eine Lösung?
Murtaza Munshi
5
Erwähnenswert ist auch, dass Sie keine Verknüpfung von einer Website (z. B. einem lokalen Entwickler-Server) zu einer lokalen Datei herstellen können. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala
14

Wenn Sie IIS auf Ihrem PC ausführen, können Sie das Verzeichnis, das Sie erreichen möchten, als virtuelles Verzeichnis hinzufügen. Klicken Sie dazu mit der rechten Maustaste auf Ihre Site in ISS und klicken Sie auf "Virtuelles Verzeichnis hinzufügen". Benennen Sie den virtuellen Ordner. Zeigen Sie mit dem virtuellen Ordner auf Ihren Ordner auf Ihrem lokalen PC. Sie müssen auch Anmeldeinformationen angeben, die über Berechtigungen für den Zugriff auf den bestimmten Ordner verfügen, z. HOSTNAME \ Benutzername und Passwort. Danach können Sie wie jede andere Datei auf Ihrer Site auf die Datei im virtuellen Ordner zugreifen.

http://sitename.com/virtual_folder_name/filename.fileextension

Dies funktioniert übrigens auch mit Chrome, das sonst die Dateiprotokolldatei nicht akzeptiert: //

Hoffe das hilft jemandem :)

user3507261
quelle
Danke für die Antwort! Ich habe file: /// vor einen Pfad zu einer Datei gesetzt, aber wenn ich darauf klicke, passiert nichts. Ich muss es mit Strg öffnen (in neuem Tab). Wieso ist es so?
Piotr Czyż
5

Janky bestenfalls

<a href="file://///server/folders/x/x/filename.ext">right click </a></td>

Klicken Sie mit der rechten Maustaste, wählen Sie die Option "Speicherort kopieren" und fügen Sie sie in die URL ein.

Chet Meinzer
quelle
Sind wir gezwungen, mit der rechten Maustaste zu klicken? Gibt es eine Möglichkeit, einfach mit der linken Maustaste darauf zu klicken?
Bandoleras
1

zurück bis 2017:

Verwenden Sie URL.createObjectURL (Datei) , um einen lokalen Link zum vom Benutzer ausgewählten Dateisystem zu erstellen.

Vergessen Sie nicht, mit URL.revokeObjectURL () Speicher freizugeben.

pery mimon
quelle
Für das Dateiargument hier ist ein tatsächliches Dateiobjekt erforderlich, das in der JS-Laufzeit des Browser-Clients erstellt wurde. Dies bedeutet, dass wir es bereits auf den Browser-Client hochgeladen haben müssen (z. B. über ein Steuerelement zum Hochladen von Dateien). Die generierte URL ist eine Blob-URL zum Herunterladen oder Verweisen auf diese Kopie, die in der JS-Laufzeit des Browser-Clients im Speicher gespeichert ist. Dies hilft nicht beim Erstellen eines Links zu einer lokalen Datei. Es ist ein Link zu einer im Speicher gespeicherten Kopie (die sich sonst nicht anders verhält, wenn wir versuchen, darauf zuzugreifen).
Doppelgreener
Genau das, was ich brauchte. Verwenden Sie die Dateieingabe, um eine Datei auszuwählen, und öffnen Sie sie dann mit createObjectURL auf einer Registerkarte.
Tony Lugg
0

Ich habe einen Weg und arbeite so:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
quelle
Das sieht selbst im Internet Explorer nicht nach einem gültigen Zielwert aus .
Doppelgreener
IE ignoriert (ungültiges) Ziel (oben). Das Folgende funktioniert gut mit IE10, 11: <a href="C:/tmp"> Link zu tmp auf Laufwerk C. </a>
primehunter
Es funktioniert gut für mich, wenn ich IE und einen Netzwerklaufwerkspfad wie 'file: // servername / path \ to \ folder' anstelle von FOLDER_PATH verwende. Wenn Sie 'target = "_ explorer.exe"' weglassen, wird der Ordner im IE anstelle von explorer.exe geöffnet und sieht dem Explorer ziemlich ähnlich.
JonP