web-dev-qa-db-fra.com

Comment spécifier un fichier local au sein de HTML à l'aide du fichier: schéma?

Je charge un fichier HTML hébergé sur le serveur Apache intégré à OS X. Dans ce fichier, je suis lié à un autre fichier HTML dans le même répertoire, comme suit:

<a href="2ndFile.html"><button type="submit">Local file</button>

Cela marche. Cependant (pour des raisons trop longues pour entrer), j'essaye d'utiliser le fichier: schéma à la place, mais je ne peux rien faire fonctionner. Voici comment je réécris la ligne ci-dessus en utilisant le fichier:

<a href="file://192.168.1.57/~User/2ndFile.html"><button type="submit">Local file</button>

(192.168.1.57 est mon adresse IP actuelle)

La modification de ce qui suit ne fonctionne pas non plus:

<a href="file://Name-Of-MacBookPro/~User/2ndFile.html"><button type="submit">Local file</button>

Mais le fichier ne peut pas être trouvé, comment devrait-il être spécifié en utilisant le fichier: schéma?

25
Gruntcakes

Le schéma d'URL file: fait référence à un fichier sur l'ordinateur client. Il n'y a pas de nom d'hôte dans le schéma file:; vous venez de fournir le chemin du fichier. Ainsi, le fichier sur votre ordinateur local serait file:///~User/2ndFile.html. Remarquez les trois barres obliques. la partie du nom d'hôte de l'URL est vide, la barre oblique au début du chemin suit immédiatement la double barre oblique au début de l'URL. Vous devrez également développer le chemin de l'utilisateur. ~ ne développe pas dans une URL file:. Donc, vous aurez besoin de file:///home/User/2ndFile.html (sur la plupart des Unix), file:///Users/User/2ndFile.html (sous Mac OS X) ou file:///C:/Users/User/2ndFile.html (sous Windows).

De nombreux navigateurs, pour des raisons de sécurité, n'autorisent pas la liaison d'un fichier chargé d'un serveur à un fichier local. Donc, vous ne pourrez peut-être pas faire cela à partir d'une page chargée via HTTP; vous pouvez uniquement créer un lien vers les URL file: à partir d'autres pages locales.

40
Brian Campbell

Le protocole 'fichier' n'est pas un protocole réseau. Par conséquent, le fichier: //192.168.1.57/~User/2ndFile.html n'a tout simplement aucun sens. 

La question est de savoir comment charger le premier fichier. Est-ce vraiment fait en utilisant un serveur web? Ne sonne pas vraiment comme. Si tel est le cas, pourquoi ne pas utiliser le même protocole, probablement http? Vous ne pouvez pas vous attendre à changer simplement de protocole et à utiliser deux protocoles différents de la même manière ...

Je soupçonne que le premier fichier est vraiment chargé en utilisant le serveur Apache, mais simplement en l'ouvrant? href = "2ndFile.html" fonctionne simplement parce qu'il utilise une "URL relative". Cela oblige le navigateur à utiliser le même protocole et le même chemin d'accès que celui dans lequel il a obtenu le premier fichier (actuel). 

2
arkascha

le protocole url "file: //" ne peut être utilisé que pour localiser des fichiers dans le système de fichiers de la machine locale. Puisque ce code html est interprété par un navigateur, la "machine locale" est la machine qui exécute le navigateur.

si vous obtenez des erreurs de fichier non trouvé, je suppose que c'est parce que le fichier n'est pas trouvé. Cependant, cela pourrait aussi être une limitation de la sécurité du navigateur. certains navigateurs ne vous permettent pas de référencer un fichier de système de fichiers à partir d'une page html autre qu'un système de fichiers. vous pouvez essayer d'utiliser le chemin du fichier à partir de la ligne de commande sur la machine qui exécute le navigateur pour confirmer qu'il s'agit d'une limitation du navigateur et non d'un fichier manquant légitime.

1
james turner

J'avais un problème similaire auparavant et dans mon cas, le fichier se trouvait dans une autre machineSo, j'ai mappé le lecteur réseau z sur l'emplacement du dossier où se trouve mon fichierso dans mon projet Web, je pouvais accéder au fichier HTML via le contexte

0
msonbati