Как создать ссылку на локальный файл на локальной странице?

Я хотел бы иметь html файл, который упорядочивает определенные файлы, разбросанные по всему моему жесткому диску. Например, у меня есть два файла, на которые я ссылался бы:

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

Проблема в том, что я хотел бы, чтобы ссылки работали как ярлык файла. Я пробовал следующее:

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

... но первая ссылка ничего не делает, а вторая ссылка открывает файл в Chrome, а не в VLC.

Мои вопросы:

  • Есть ли способ настроить мой HTML, чтобы рассматривать ссылки как ярлыки для файлов?

  • Если нет способа настроить HTML, есть ли другие способы аккуратной ссылки на файлы, разбросанные по всему жесткому диску?

Мой компьютер работает под управлением Windows 7, а мой веб-браузер - Chrome.

Ответ 1

Вам нужно использовать протокол file:/// (да, это три слэша), если вы хотите установить связь с локальными файлами.

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

Они никогда не будут открывать файл в локальных приложениях автоматически. Это по соображениям безопасности, и я доберусь до этого в последнем разделе. Если он откроется, он будет открыт только в браузере. Если это ваш браузер может отобразить файл, он будет. Если он не может, он, вероятно, спросит вас, хотите ли вы загрузить его.

Некоторые браузеры, такие как современные версии Chrome, даже откажутся переходить от протокола http к файловому протоколу, поэтому вам лучше убедиться, что вы открываете его локально, используя протокол файлов, если вы хотите вообще это делать.

Почему он застревает без file:///?

Первая часть URL - это протокол. Протокол - это несколько букв, затем двоеточие и две черты. HTTP:// и FTP:// являются действительными протоколами; C:/ нет, и я уверен, что он даже не похож на него.

C:/ также не является допустимым веб-адресом. Браузер мог предположить, что это означает http://c/ с указанным пустым портом, но это приведет к ошибке.

Ваш браузер может не предполагать, что он ссылается на локальный файл. У этого нет оснований делать это предположение, потому что публичные сайты обычно не пытаются ссылаться на локальные файлы людей.

Итак, если вы хотите получить доступ к локальным файлам: скажите ему использовать протокол файлов.

Почему три слэша?

Потому что это часть схемы File URI. У вас есть возможность указать хост после первых двух косых черт. Если вы пропустите указание хоста, он просто предположит, что вы ссылаетесь на файл на своем ПК. Другими словами: file:///C:/etc является ярлыком для file://localhost/C:/etc.

Эти файлы будут по-прежнему открываться в вашем браузере, и это хорошо

Ваш браузер будет отвечать на эти файлы так же, как они будут реагировать на один и тот же файл в любом месте в Интернете. Эти файлы не будут открываться в вашем файловом обработчике по умолчанию (например, MS Word или VLC Media Player), и вы не сможете делать что-либо вроде профайла Проводника, чтобы открыть местоположение файла.

Это очень хорошо для вашей безопасности.

Сайты в вашем браузере не могут очень хорошо взаимодействовать с вашей операционной системой. Если хороший сайт может сказать, что lecture.mp4 открывается в VLC.exe, вредоносный сайт может сказать ему открыть virus.bat в CMD.exe. Или он может просто сказать вашему компьютеру запустить несколько файлов Uninstall.exe или открыть File Explorer миллион раз.

Это может быть не удобно для вас, но безопасность HTML и браузера не была действительно разработана для того, что вы делаете. Если вы хотите открыть lecture.mp4 в VLC.exe, подумайте над тем, чтобы писать настольное приложение.

Ответ 2

Если вы используете IIS на своем ПК, вы можете добавить каталог, который вы пытаетесь найти в качестве виртуального каталога. Для этого вы щелкните правой кнопкой мыши на своем сайте в ISS и нажмите "Добавить виртуальный каталог". Назовите виртуальную папку. Укажите виртуальную папку в папку на локальном компьютере. Вы также должны предоставить учетные данные, которые имеют привилегии для доступа к определенной папке, например. HOSTNAME\имя пользователя и пароль. После этого вы можете получить доступ к файлу в виртуальной папке как к любому другому файлу на вашем сайте.

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

Кстати, это также работает с Chrome, который в противном случае не принимает файл файлового протокола://

Надеюсь, это поможет кому-то:)

Ответ 3

Янки в лучшем случае

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

а затем щелкните правой кнопкой мыши, выберите опцию "Копировать местоположение", а затем вставьте в URL-адрес.

Ответ 4

У меня есть способ и работаю следующим образом:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>

Ответ 5

Это работает в Chrome:

<a href="file:///\\\serverIP/directory/">Link Label</a>

Ответ 6

вернуться к 2017 году:

используйте URL.createObjectURL(файл) для создания локальной ссылки на файловую систему, которую пользователь выбирает;

не забывайте освобождать память, используя URL.revokeObjectURL()