Закрепить открытый локальный файл HTML на Mac [дубликат]

Если у вас есть базовый класс A и производный класс B, вы можете сделать следующее.

void wantAnA(A myA)
{
   // work with myA
}

B derived;
// work with the object "derived"
wantAnA(derived);

Теперь для метода wantAnA нужна копия derived , Однако объект derived не может быть полностью скопирован, так как класс B может изобретать дополнительные переменные-члены, которые не находятся в его базовом классе A.

Поэтому, чтобы вызвать wantAnA, компилятор будет «срезать» все дополнительные члены производного класса. Результатом может быть объект, который вы не хотите создавать, потому что

  • он может быть неполным,
  • ведет себя как объект A (все особые поведения класс B теряется).
119
задан doppelgreener 15 August 2013 в 05:42
поделиться

6 ответов

Вам нужно использовать протокол 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/ с указанным пустым портом, но это не сработает.

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

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

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

Потому что это часть схемы [U1] файла 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 , подумайте над записью настольного приложения.

200
ответ дан doppelgreener 22 August 2018 в 01:59
поделиться
  • 1
    Спасибо Джонатан. Знаете ли вы, есть ли способ «показать файл в папке»? как альтернатива? – Brian Fitzpatrick 15 August 2013 в 05:38
  • 2
    @Brian. Ваш браузер не может взаимодействовать с вашей ОС таким образом, и вы должны быть очень рады, что это невозможно. – doppelgreener 15 August 2013 в 05:45
  • 3
    Похоже, что Chrome не будет загружать локальные файлы, используя файл: /// protocol anyway (давая вам ошибку Not allowed to load local resource) – Loupax 24 March 2014 в 18:09
  • 4
    Я хочу дать ссылку как этот файл: /// .. \ .. \ sort.mw & quot; так что он возвращает две папки и получает там файл. Потому что мы используем файл слова в dropbox. Так что есть решение. – Murtaza Munshi 28 October 2015 в 10:55
  • 5
    Также стоит упомянуть, что вы не можете ссылаться с веб-сайта (например, локального dev-сервера) на локальный файл. forums.mozillazine.org/viewtopic.php?f=9&t=1730 – yoshi 21 February 2016 в 00:30

Janky в лучшем случае

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

, а затем щелкните правой кнопкой мыши, выберите опцию «копировать местоположение», а затем вставьте в url.

4
ответ дан Chet Meinzer 22 August 2018 в 01:59
поделиться

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

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
0
ответ дан croxy 22 August 2018 в 01:59
поделиться
  • 1
    Это не похоже на допустимое целевое значение, даже в Internet Explorer . – doppelgreener 13 October 2016 в 11:06
  • 2
    IE игнорирует (недействительную) цель (см. Выше). Следующее прекрасно работает с IE10, 11: & lt; a href = "C: / tmp" & gt; Ссылка на tmp на диске C. & lt; / a & gt; – primehunter 9 November 2016 в 11:29
  • 3
    Он отлично работает для меня, используя IE и путь сетевого диска, например 'file: // имя_сервера / путь \ к \nапке' вместо FOLDER_PATH. Если вы опустите «target = & quot; _explorer.exe & quot;» папка открывается в IE вместо explorer.exe, и она выглядит в значительной степени похожей на explorer. – JonP 7 April 2017 в 13:24

Назад к 2017:

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

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

0
ответ дан pery mimon 22 August 2018 в 01:59
поделиться
  • 1
    Аргумент файла здесь требует фактического объекта файла, построенного внутри среды выполнения JS клиента браузера, то есть мы должны были бы загрузить его в клиентский браузер уже (например, с помощью элемента управления загрузкой файла). Сгенерированный URL-адрес - это URL-адрес blob для загрузки или ссылки на эту копию, хранящуюся в памяти в среде выполнения JS-клиента браузера. Это не поможет создать ссылку на локальный файл; это ссылка на копию, хранящуюся в памяти (которая иначе не будет вести себя по-разному, как только мы попытаемся получить к ней доступ). – doppelgreener 26 July 2018 в 13:31
  • 2
    конечно, ты прав. – pery mimon 2 August 2018 в 10:55

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

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

-3
ответ дан user1067656 22 August 2018 в 01:59
поделиться
  • 1
    Это бесполезное дополнение к странице. Это «это сработало для меня». ответ, который не пытается воспитывать будущих читателей о том, почему он работает. Это решение уже было предоставлено много лет назад. Кроме того, это не "управляемый" фрагмент & Quot; поэтому форматирование его как такового - это только шум страницы. Я делаю, чтобы препятствовать существованию этого поста путем downvoting. – mickmackusa 9 May 2018 в 01:52

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

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

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

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

10
ответ дан user3507261 22 August 2018 в 01:59
поделиться
  • 1
    Спасибо за ответ! Я поставил файл: /// перед тем, как перейти к файлу, но когда я нажимаю на него, ничего не происходит. Мне нужно открыть его с помощью Ctrl (на новой вкладке). Почему это так? – Piotr Czyż 30 July 2015 в 09:30
Другие вопросы по тегам:

Похожие вопросы: