Comment faire pour qu'un lien html ouvre un dossier

106

Je dois permettre aux utilisateurs d'une application d'ouvrir un dossier en cliquant sur un lien dans une page Web. Le chemin du dossier se trouve sur le réseau et est accessible de partout. Je suis probablement sûr qu'il n'y a pas de moyen facile de le faire, mais peut-être que je me trompe?

Sébastien Lachance
la source
4
J'ai répondu ci-dessous; il s'agit d'une exigence courante des applications Web d'entreprise qui est rendue presque impossible par une sécurité erronée (il devrait être possible d'activer des liens de fichiers dans des pages http de confiance). Je n'ai testé que de manière approfondie sur Windows.
Andrew Duffy

Réponses:

107

Voulez-vous ouvrir un dossier partagé dans l'Explorateur Windows? Vous devez utiliser un file:lien, mais il y a des mises en garde:

  • Internet Explorer fonctionnera si le lien est un chemin UNC converti ( file://server/share/folder/).
  • Firefox fonctionnera si le lien est dans sa propre forme mutilée en utilisant cinq barres obliques ( file://///server/share/folder) et que l'utilisateur a désactivé la restriction de sécurité sur les file:liens dans une page servie via HTTP . Heureusement, IE accepte également le formulaire de lien mutilé.
  • Opera, Safari et Chrome ne peuvent pas être convaincus d'ouvrir un file:lien dans une page servie via HTTP.
Andrew Duffy
la source
4
dans IE uniquement si le chemin UNC et le site web contenant le lien sont dans le même domaine, c'est-à-dire uniquement dans l'intranet.
Stefan Steiger
4
Je pense que ce n'est plus correct - les nouvelles versions d'IE semblent bloquer ce comportement tout comme Chrome / Safari / etc.
ZeekLTK
1
Je viens d'essayer cela dans IE 11 et vous pouvez en fait ouvrir un fichier local sans le télécharger (comme ouvrir un chemin de fichier déjà existant). Cela n'existe toujours pas dans Chrome.
Hohohodown
4
Vous pouvez faire fonctionner cela dans Chrome via l' extension Chrome LocalLinks . Merci à cette réponse StackOverflow
Zach Johnson
@Andrew Duffy, existe-t-il une documentation indiquant que Google Chrome bloque ce comportement? Je voudrais en savoir plus à ce sujet
jeu de mots
7

L'URL file://[servername]/[sharename]doit ouvrir une fenêtre d'explorateur vers le dossier partagé sur le réseau.

hautement caféiné
la source
4

assurez-vous que vos autorisations de dossier sont définies de manière à ce qu'une liste de répertoires soit autorisée, puis pointez simplement votre ancre vers ce dossier en utilisant chmod 701 (cela peut être risqué) par exemple

<a href="./downloads/folder_i_want_to_display/" >Go to downloads page</a>

assurez-vous que vous n'avez aucun fichier index.html dans ce répertoire

fermer à clé
la source
Cette réponse fonctionne. La partie "liste de répertoires autorisée" est très importante. Si ce n'est pas autorisé, vous pouvez l'activer mais c'est différent pour chaque application serveur.
Travis
3

L'utilisation de file: ///// ne fonctionne tout simplement pas si les paramètres de sécurité sont définis même à un niveau modéré.

Si vous souhaitez simplement que les utilisateurs puissent télécharger / afficher des fichiers * situés sur un réseau ou les partager, vous pouvez configurer un répertoire virtuel dans IIS. Dans l'onglet Propriétés, assurez-vous que "Un partage situé sur un autre ordinateur" est sélectionné et que "Se connecter en tant que ..." est un compte qui peut voir l'emplacement réseau.

Lien vers le répertoire virtuel depuis votre page Web (par exemple http: // yoursite / yourvirtualdir / ) et cela ouvrira une vue du répertoire dans le navigateur Web.

* Vous pouvez autoriser les autorisations d'écriture sur le répertoire virtuel pour permettre aux utilisateurs d'ajouter des fichiers mais ne pas les essayer et supposer que les autorisations réseau remplaceraient ce paramètre.

Bickie
la source
Cela est pertinent aujourd'hui, car Chrome et les versions plus récentes d'IE bloquent l'accès aux ressources locales de type fichier: // à partir de pages Web sans fichier. En outre, cela peut être configuré pour s'exécuter dans IIS Express, bien qu'il doive être ajouté et exécuté manuellement.
Schmuli
1

Vous pouvez également copier l'adresse du lien et la coller dans une nouvelle fenêtre pour contourner la sécurité. Cela fonctionne dans Chrome et Firefox, mais vous devrez peut-être ajouter des barres obliques dans Firefox.

Wyrmwood
la source
1

Un peu tard à la fête, mais j'ai dû résoudre cela pour moi-même récemment, bien que légèrement différent, cela pourrait encore aider quelqu'un avec des circonstances similaires à la mienne.

J'utilise xampp sur un ordinateur portable pour exécuter une application de site Web purement locale sous Windows. (Un environnement très spécifique que je connais). Dans cet exemple, j'utilise un lien html vers un fichier php et j'exécute:

shell_exec('cd C:\path\to\file');
shell_exec('start .');

Cela ouvre une fenêtre locale de l'explorateur Windows.

Lucas Taulealea
la source
1
Prometteur, mais lorsque je lance cela dans Firefox, l'onglet se bloque. (Il semble que la session soit agitée ou quelque chose comme ça, parce que je peux accéder à d'autres sites, mais ce site semble accroché - même dans d'autres onglets!)
Stephen R
Je viens de le tester dans Firefox, cela fonctionne pour moi, mais je ne peux pas spécifier le dossier dans lequel ouvrir, il ne s'ouvre que dans le répertoire racine du fichier php.
Lucas Taulealea
0

J'espère que cela aidera quelqu'un un jour. Je faisais un petit POC et je suis tombé sur ça. Un bouton, onClick affiche le contenu du dossier. Ci-dessous le HTML,

<input type=button onClick="parent.location='file:///C:/Users/' " value='Users'>
Nagaraja JB
la source