¿Cómo puedo crear un enlace a un archivo local en una página web administrada localmente?

155

Me gustaría tener un archivo html que organice ciertos archivos dispersos en mi disco duro. Por ejemplo, tengo dos archivos a los que vincularía:

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

El problema es que me gustaría que los enlaces funcionen como un acceso directo al archivo. He intentado lo siguiente:

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

... pero el primer enlace no hace nada y el segundo enlace abre el archivo en Chrome, no en VLC.

Mis preguntas son:

  1. ¿Hay alguna forma de ajustar mi HTML para tratar los enlaces como accesos directos a los archivos?

  2. Si no hay una manera de ajustar el HTML, ¿hay alguna otra manera de vincular perfectamente a los archivos dispersos en todo el disco duro?

Mi computadora ejecuta Windows 7 y mi navegador web es Chrome.

Brian Fitzpatrick
fuente

Respuestas:

259

Debe usar el file:///protocolo (sí, son tres barras) si desea vincular a archivos locales.

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

Estos nunca abrirán el archivo en sus aplicaciones locales automáticamente. Eso es por razones de seguridad que cubriré en la última sección. Si se abre, solo se abrirá en el navegador. Si su navegador puede mostrar el archivo, lo hará, de lo contrario, probablemente le preguntará si desea descargar el archivo.

Las versiones modernas de muchos navegadores (por ejemplo, Firefox y Chrome) se negarán a pasar del protocolo http al protocolo de archivo para evitar comportamientos maliciosos. Tendrá que abrir su página web localmente utilizando el protocolo de archivo si quiere hacer esto.

¿Por qué se queda atascado sin file:///?

La primera parte de una URL es el protocolo. Un protocolo son unas pocas letras, luego dos puntos y dos barras. HTTP://y FTP://son protocolos válidos; C:/no lo es y estoy bastante seguro de que ni siquiera se parece a uno.

C:/Tampoco es una dirección web válida. El navegador podría suponer que está destinado a tener http://c/un puerto en blanco especificado, pero eso fallará.

Es posible que su navegador no suponga que se refiere a un archivo local. Tiene pocas razones para hacer esa suposición porque los sitios públicos generalmente no intentan enlazar a los archivos locales de las personas.

Entonces, si desea acceder a archivos locales: dígale que use el protocolo de archivo.

¿Por qué tres cortes?

Porque es parte del esquema de URI de archivo . Tiene la opción de especificar un host después de las dos primeras barras. Si omite especificar un host, simplemente asumirá que se está refiriendo a un archivo en su propia PC. Esto significa que file:///C:/etces un atajo para file://localhost/C:/etc.

Estos archivos aún se abrirán en su navegador y eso es bueno

Su navegador responderá a estos archivos de la misma manera que respondería al mismo archivo en cualquier lugar de Internet. Estos archivos no se abrirán en su controlador de archivos predeterminado (por ejemplo, MS Word o VLC Media Player), y no podrá hacer nada como pedirle al Explorador de archivos que abra la ubicación del archivo.

Esto es algo extremadamente bueno para su seguridad.

Los sitios en su navegador no pueden interactuar muy bien con su sistema operativo. Si un sitio bueno podría indicar a la máquina para abrir lecture.mp4 en vlc.exe , un sitio malicioso podría decir que se abra virus.bat en CMD.exe . O simplemente podría indicarle a su máquina que ejecute algunos archivos Uninstall.exe o abra File Explorer un millón de veces.

Puede que esto no sea conveniente para usted, pero la seguridad de HTML y del navegador no se diseñó realmente para lo que está haciendo. Si usted quiere ser capaz de abrir lecture.mp4 en vlc.exe que no hacer una aplicación de escritorio en su lugar.

doppelgreener
fuente
1
Gracias Jonathan ¿Sabes si hay una manera de "mostrar el archivo en la carpeta" como alternativa?
Brian Fitzpatrick
77
@Brian Su navegador no puede interactuar con su sistema operativo de esa manera, y debería estar extremadamente contento de que no pueda.
Doppelgreener
23
Parece que Chrome no descargará archivos locales usando el archivo: /// protocolo de todos modos (le da un Not allowed to load local resourceerror)
Loupax
1
Quiero dar un enlace como este "archivo: /// .. \ .. \ sort.mw" para que regrese dos carpetas y obtenga el archivo allí. Porque estamos usando el archivo de Word en Dropbox. Entonces, ¿hay alguna solución?
Murtaza Munshi
55
También vale la pena mencionar que no puede vincular desde un sitio web (por ejemplo, un servidor de desarrollo local) a un archivo local. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala
14

Si está ejecutando IIS en su PC, puede agregar el directorio al que está intentando acceder como un Directorio virtual. Para hacer esto, haga clic derecho en su sitio en ISS y presione "Agregar directorio virtual". Nombra la carpeta virtual. Apunte la carpeta virtual a la ubicación de su carpeta en su PC local. También debe proporcionar credenciales que tengan privilegios para acceder a la carpeta específica, por ejemplo. HOSTNAME \ nombre de usuario y contraseña. Después de eso, puede acceder al archivo en la carpeta virtual como cualquier otro archivo en su sitio.

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

Por cierto, esto también funciona con Chrome que de lo contrario no acepta el archivo de protocolo de archivo: //

Espero que esto ayude a alguien :)

usuario3507261
fuente
¡Gracias por responder! He puesto file: /// antes de una ruta a un archivo, sin embargo, cuando hago clic en él no sucede nada. Tengo que abrirlo con Ctrl (en una nueva pestaña). ¿Por que es esto entonces?
Piotr Czyż
5

Janky en el mejor de los casos

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

y luego haga clic derecho, seleccione la opción "copiar ubicación" y luego péguelo en la URL.

Chet Meinzer
fuente
¿Estamos obligados a hacer clic derecho? ¿Existe alguna forma de hacer clic izquierdo en él?
Bandoleras
1

de vuelta a 2017:

use URL.createObjectURL (archivo) para crear un enlace local al sistema de archivos que el usuario seleccione;

no olvides liberar memoria usando URL.revokeObjectURL ()

pery mimon
fuente
El argumento del archivo aquí requiere un objeto de archivo real construido dentro del tiempo de ejecución JS del cliente del navegador, lo que significa que ya deberíamos haberlo cargado en el cliente del navegador (a través de un control de formulario de carga de archivos, por ejemplo). La URL generada es una URL de blob para descargar o hacer referencia a esa copia almacenada en la memoria dentro del tiempo de ejecución JS del cliente del navegador. Eso no va a ayudar a crear un enlace a un archivo local; es un enlace a una copia almacenada en la memoria (que de lo contrario no se comportará de manera diferente una vez que intentemos acceder a ella).
doppelgreener
Exactamente lo que necesitaba. Use File Input para seleccionar un archivo, luego ábralo en una pestaña usando createObjectURL.
Tony Lugg
0

Tengo un camino y trabajo como este:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
Maciej
fuente
Eso no parece un valor objetivo válido, incluso en Internet Explorer .
doppelgreener
IE ignora el objetivo (no válido) (arriba). Lo siguiente funciona bien con IE10, 11: <a href="C:/tmp"> Enlace a tmp en la unidad C. </a>
primehunter
Funciona bien para mí, usando IE y una ruta de unidad de red como 'file: // servername / path \ to \ folder' en lugar de FOLDER_PATH. Si omite 'target = "_ explorer.exe"', la carpeta se abre en IE en lugar de explorer.exe y se parece bastante al explorador.
JonP