Як я можу створити посилання на локальний файл на локальній веб-сторінці?


155

Я хотів би мати файл 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.

Мої запитання:

  1. Чи є спосіб налаштувати мій HTML, щоб трактувати посилання як ярлики до файлів?

  2. Якщо немає способу коригування HTML, чи є інші способи акуратного посилання на файли, розкидані по жорсткому диску?

Мій комп'ютер працює під керуванням Windows 7, а мій веб-браузер - Chrome.

Відповіді:


259

Вам потрібно скористатися file:///протоколом (так, це три косої риси), якщо ви хочете зробити посилання на локальні файли.

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

Вони ніколи не відкриють файл у ваших локальних програмах автоматично. Це з міркувань безпеки, про які я розповім в останньому розділі. Якщо воно відкриється, воно відкриється лише в браузері. Якщо ваш браузер може відобразити файл, він буде, інакше він, ймовірно, запитає, чи хочете ви завантажити файл.

Сучасні версії багатьох браузерів (наприклад, Firefox та Chrome) відмовляться переходити від протоколу http до файлового протоколу, щоб запобігти шкідливій поведінці. Вам потрібно буде відкрити свою веб-сторінку локально, використовуючи файловий протокол, якщо ви хочете взагалі цим займатися.

Чому вона застряє file:///?

Перша частина URL-адреси - це протокол. Протокол - це кілька літер, потім двокрапка і дві косої риски. HTTP://і FTP://є дійсними протоколами; C:/ні, і я впевнений, що він навіть не нагадує належним чином.

C:/також не є дійсною веб-адресою. Веб-переглядач може припустити, що це має бути http://c/із вказаним порожнім портом, але це не вдасться.

Ваш веб-переглядач може не вважати, що він посилається на локальний файл. Це мало причин робити таке припущення, оскільки загальнодоступні веб-сайти зазвичай не намагаються зв’язатись із локальними файлами людей.

Отже, якщо ви хочете отримати доступ до локальних файлів: скажіть йому, щоб він використовував протокол файлів.

Чому три косі риски?

Тому що це частина схеми URI файлу . У вас є можливість вказати хост після перших двох нахилів. Якщо пропустити вказівку хоста, він просто припустить, що ви посилаєтесь на файл на своєму ПК. Це означає file:///C:/etc, що це ярлик для file://localhost/C:/etc.

Ці файли все ще відкриються у вашому браузері, і це добре

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

Це надзвичайно гарна річ для вашої безпеки.

Сайти у вашому браузері не можуть дуже добре взаємодіяти з вашою операційною системою. Якщо хороший сайт може сказати вашу машину відкритою lecture.mp4 в vlc.exe , зловмисний сайт міг би сказати, щоб відкрити virus.bat в CMD.exe . Або це може просто сказати вашій машині запустити кілька файлів Uninstall.exe або відкрити Провідник файлів мільйон разів.

Це може вам не зручно, але безпека HTML та веб-переглядача насправді не розроблена для того, що ви робите. Якщо ви хочете , щоб мати можливість відкрити lecture.mp4 в vlc.exe розглянути написання замість настільного додатки.


1
Дякую Джонатане. Чи знаєте ви, чи існує спосіб "показати файл у папці" як альтернативу?
Брайан Фіцпатрік

7
@Brian Ваш браузер не може взаємодіяти з вашою ОС таким чином, і ви повинні бути надзвичайно раді, що це не може.
doppelgreener

23
Здається, Chrome все одно не завантажує локальні файли, використовуючи файл: /// протокол (надаючи Not allowed to load local resourceпомилку)
Loupax

1
Я хочу надати таке посилання, як "файл: /// .. \ .. \ sort.mw", щоб він повернувся до двох папок і отримав файл там. Тому що ми використовуємо файл слова в dropbox. Так чи є рішення.
Муртаза Мунші

5
Також варто згадати, що ви не можете пов’язати веб-сайт (наприклад, локальний сервер розробників) з локальним файлом. forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala

14

Якщо на вашому ПК працює IIS, ви можете додати каталог, до якого ви намагаєтесь отримати доступ як віртуальний каталог. Для цього ви клацніть правою кнопкою миші на своєму сайті в ISS і натисніть "Додати віртуальний каталог". Назвіть віртуальну папку. Наведіть віртуальну папку на місце папки на вашому локальному ПК. Вам також потрібно надати облікові дані, які мають привілеї для доступу до певної папки, наприклад. HOSTNAME \ ім'я користувача та пароль. Після цього ви можете отримати доступ до файлу у віртуальній папці, як і будь-який інший файл на вашому сайті.

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

До речі, це також працює з Chrome, який інакше не приймає файл file-Protocol: //

Сподіваюся, це комусь допоможе :)


Дякуємо за відповідь! Я поставив файл: /// перед тим, як шлях до файлу, проте при натисканні на нього нічого не відбувається. Я маю відкрити його за допомогою Ctrl (на новій вкладці). Чому так?
Piotr Czyż

5

Джанкі в кращому випадку

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

а потім клацніть правою кнопкою миші, виберіть параметр "Скопіювати місцеположення" та вставте URL-адресу.


ми змушені клацнути правою кнопкою миші? чи існує спосіб просто натиснути на нього лівою кнопкою миші?
Bandoleras

1

назад до 2017 року:

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

не забудьте звільнити пам’ять за допомогою URL.revokeObjectURL ()


Аргумент файлу тут вимагає фактичного об’єкта файлу, побудованого в межах JS клієнта браузера, тобто ми повинні вже завантажити його до клієнта браузера (наприклад, через контроль форми завантаження файлів). Створена URL-адреса - це крапка URL-адреса для завантаження або посилання на цю копію, що зберігається в пам’яті в межах програми JS клієнта браузера. Це не допоможе створити посилання на локальний файл; це посилання на копію, що зберігається в пам'яті (яка в іншому випадку не поводитиметься інакше, коли ми намагаємося отримати доступ до неї).
doppelgreener

Саме те, що мені було потрібно. За допомогою файлового введення виберіть файл, а потім відкрийте його на вкладці, використовуючи createObjectURL.
Тоні Лугг

0

Я маю такий спосіб і працюю так:

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

Це не схоже на дійсне цільове значення, навіть в Internet Explorer .
doppelgreener

IE ігнорує (недійсну) ціль (вище). Додатково працює з IE10, 11: <a href="C:/tmp"> Посилання на tmp на диску C. </a>
primehunter

Це добре працює для мене, використовуючи IE і шлях мережевого диска, як 'файл: // ім’я сервера / шлях \ до \ папки' замість FOLDER_PATH. Якщо ви пропустите 'target = "_ explorer.exe"', папка відкриється в IE замість explor.exe, і це схоже на Explorer.
JonP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.