Comment puis-je créer un lien vers un fichier local sur une page Web exécutée localement?

156

J'aimerais avoir un fichier html qui organise certains fichiers dispersés sur mon disque dur. Par exemple, j'ai deux fichiers vers lesquels je voudrais créer un lien:

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

Le problème est que j'aimerais que les liens fonctionnent comme un raccourci vers le fichier. J'ai essayé ce qui suit:

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

... mais le premier lien ne fait rien et le deuxième lien ouvre le fichier dans Chrome, pas dans VLC.

Mes questions sont:

  1. Existe-t-il un moyen d'ajuster mon HTML pour traiter les liens comme des raccourcis vers les fichiers?

  2. S'il n'y a pas de moyen d'ajuster le HTML, existe-t-il d'autres moyens de lier proprement des fichiers dispersés sur le disque dur?

Mon ordinateur exécute Windows 7 et mon navigateur Web est Chrome.

Brian Fitzpatrick
la source

Réponses:

259

Vous devez utiliser le file:///protocole (oui, c'est trois barres obliques) si vous souhaitez créer un lien vers des fichiers locaux.

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

Ceux-ci n'ouvriront jamais automatiquement le fichier dans vos applications locales. C'est pour des raisons de sécurité que je couvrirai dans la dernière section. S'il s'ouvre, il ne s'ouvrira que dans le navigateur. Si votre navigateur peut afficher le fichier, il le fera, sinon il vous demandera probablement si vous souhaitez télécharger le fichier.

Les versions modernes de nombreux navigateurs (par exemple Firefox et Chrome) refuseront de passer du protocole http au protocole de fichier pour éviter tout comportement malveillant. Vous devrez ouvrir votre page Web localement en utilisant le protocole de fichier si vous voulez faire cela.

Pourquoi reste-t-il bloqué sans file:///?

La première partie d'une URL est le protocole. Un protocole est composé de quelques lettres, puis de deux points et de deux barres obliques. HTTP://et FTP://sont des protocoles valides; C:/n'est pas et je suis à peu près sûr qu'il ne ressemble même pas vraiment à un.

C:/n'est pas non plus une adresse Web valide. Le navigateur peut supposer qu'il est censé être http://c/avec un port vide spécifié, mais cela va échouer.

Votre navigateur peut ne pas supposer qu'il fait référence à un fichier local. Il a peu de raisons de faire cette hypothèse car les sites publics n'essaient généralement pas de créer des liens vers les fichiers locaux des personnes.

Donc, si vous voulez accéder aux fichiers locaux: dites-lui d'utiliser le protocole de fichier.

Pourquoi trois barres obliques?

Parce que cela fait partie du schéma URI de fichier . Vous avez la possibilité de spécifier un hôte après les deux premières barres obliques. Si vous ignorez la spécification d'un hôte, cela supposera simplement que vous faites référence à un fichier sur votre propre PC. Cela signifie qu'il file:///C:/etcs'agit d'un raccourci pour file://localhost/C:/etc.

Ces fichiers s'ouvriront toujours dans votre navigateur et c'est bien

Votre navigateur répondra à ces fichiers de la même manière qu'il répondrait au même fichier n'importe où sur Internet. Ces fichiers ne s'ouvriront pas dans votre gestionnaire de fichiers par défaut (par exemple, MS Word ou VLC Media Player), et vous ne pourrez rien faire comme demander à l'Explorateur de fichiers d'ouvrir l'emplacement du fichier.

C'est une très bonne chose pour votre sécurité.

Les sites de votre navigateur ne peuvent pas très bien interagir avec votre système d'exploitation. Si un bon site pouvait dire à votre machine d'ouvrir lecture.mp4 dans VLC.exe , un site malveillant pourrait lui dire d'ouvrir virus.bat dans CMD.exe . Ou il pourrait simplement dire à votre ordinateur d'exécuter quelques fichiers Uninstall.exe ou d'ouvrir l'Explorateur de fichiers un million de fois.

Ce n'est peut-être pas pratique pour vous, mais la sécurité du HTML et du navigateur n'a pas vraiment été conçue pour ce que vous faites. Si vous souhaitez pouvoir ouvrir lecture.mp4 dans VLC.exe, envisagez plutôt d' écrire une application de bureau.

sosie
la source
1
Merci Jonathan. Savez-vous s'il existe un moyen "d'afficher le fichier dans le dossier" comme alternative?
Brian Fitzpatrick
7
@Brian Votre navigateur ne peut pas interagir avec votre système d'exploitation de cette manière, et vous devriez être extrêmement heureux qu'il ne le puisse pas.
doppelgreener
24
On dirait que Chrome ne téléchargera pas de toute façon les fichiers locaux en utilisant le protocole file: /// (vous donnant une Not allowed to load local resourceerreur)
Loupax
1
Je veux donner un lien comme celui-ci "file: /// .. \ .. \ sort.mw" afin qu'il retourne deux dossiers et y récupère le fichier. Parce que nous utilisons le fichier Word dans Dropbox. Alors, y a-t-il une solution.
Murtaza Munshi
5
Il peut également être utile de mentionner que vous ne pouvez pas créer de lien depuis un site Web (par exemple un serveur de développement local) vers un fichier local. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala
14

Si vous exécutez IIS sur votre PC, vous pouvez ajouter le répertoire que vous essayez d'atteindre en tant que répertoire virtuel. Pour ce faire, faites un clic droit sur votre site dans ISS et appuyez sur "Ajouter un répertoire virtuel". Nommez le dossier virtuel. Pointez le dossier virtuel vers l'emplacement de votre dossier sur votre PC local. Vous devez également fournir des informations d'identification qui ont des privilèges pour accéder au dossier spécifique, par exemple. HOSTNAME \ nom d'utilisateur et mot de passe. Après cela, vous pouvez accéder au fichier dans le dossier virtuel comme n'importe quel autre fichier sur votre site.

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

À propos, cela fonctionne également avec Chrome qui n'accepte pas le fichier de protocole de fichier: //

J'espère que cela aide quelqu'un :)

user3507261
la source
Merci de répondre! J'ai mis file: /// avant un chemin vers un fichier, mais lorsque je clique dessus, il ne se passe rien. Je dois l'ouvrir avec Ctrl (dans un nouvel onglet). Pourquoi en est-il ainsi?
Piotr Czyż
5

Janky au mieux

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

puis faites un clic droit, sélectionnez l'option "copier l'emplacement", puis collez-la dans l'URL.

Chet Meinzer
la source
sommes-nous obligés de faire un clic droit? existe-t-il un moyen de faire un clic gauche dessus?
Bandoleras
1

retour en 2017:

utilisez URL.createObjectURL (fichier) pour créer un lien local vers le système de fichiers sélectionné par l'utilisateur;

n'oubliez pas de libérer de la mémoire en utilisant URL.revokeObjectURL ()

pery mimon
la source
L'argument file ici nécessite un objet fichier réel construit dans le runtime JS du client navigateur, ce qui signifie que nous devrons déjà l'avoir téléchargé sur le client navigateur (via un contrôle de formulaire de téléchargement de fichier par exemple). L'URL générée est une URL d'objet blob pour télécharger ou référencer cette copie stockée en mémoire dans l'environnement d'exécution JS du client navigateur. Cela n'aidera pas à créer un lien vers un fichier local; c'est un lien vers une copie stockée en mémoire (qui autrement ne se comportera pas différemment une fois que nous essayons d'y accéder).
doppelgreener
Exactement ce dont j'avais besoin. Utilisez File Input pour sélectionner un fichier, puis ouvrez-le dans un onglet à l'aide de createObjectURL.
Tony Lugg
0

J'ai un moyen et travailler comme ça:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
la source
Cela ne ressemble pas à une valeur cible valide, même dans Internet Explorer .
doppelgreener
IE ignore la cible (invalide) (ci-dessus). La suite fonctionne très bien avec IE10, 11: <a href="C:/tmp"> Lien vers tmp sur le lecteur C. </a>
primehunter
Cela fonctionne bien pour moi, en utilisant IE et un chemin de lecteur réseau comme «fichier: // nom du serveur / chemin \ vers \ dossier» à la place de FOLDER_PATH. Si vous omettez 'target = "_ explorer.exe"', le dossier s'ouvre dans IE au lieu d'explorer.exe et il ressemble à peu près à l'explorateur.
JonP