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


89

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

Я использую следующий синтаксис:

[my link](file:///C:/my_file.pdf)

Но когда я открываю свой файл разметки на странице Firefox и нажимаю на ссылку, ничего не происходит.

Что именно я пропустил? Можно ли открыть локальный файл?


Также здесь ответили, похоже, это повторяющийся вопрос ?: stackoverflow.com/a/58317580/5890679
Akul Aggarwal

Vim красиво выделяет уценку, включая интерактивные ссылки. Увы, локальные ссылки, хотя и выделены, не открываются.
user2023370

Ответы:


32

Как вы открываете обработанный Markdown?

Если вы размещаете его через HTTP, то есть получаете к нему доступ через http://или https://, большинство современных браузеров откажутся открывать локальные ссылки, например, с помощью file://. Это функция безопасности :

В целях безопасности приложения Mozilla блокируют ссылки на локальные файлы (и каталоги) из удаленных файлов. Это включает связывание с файлами на жестком диске, подключенных сетевых дисках и доступ к ним по путям Uniform Naming Convention (UNC). Это предотвращает ряд неприятных возможностей, в том числе:

  • Разрешить сайтам определять вашу операционную систему, проверяя пути установки по умолчанию
  • Разрешение сайтам использовать уязвимости системы (например, C:\con\conв Windows 95/98)
  • Разрешить сайтам определять настройки браузера или читать конфиденциальные данные

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


1
Как я уже сказал, я открываю свой файл уценки в Mozilla Firefox 40.0.3 с помощью подключаемого модуля «Markdown Viewer».
Alexis Le Provost

Ах, вы не упомянули этот плагин раньше ;-) Я попробовал его с экспортом в HTML (что, как я предполагал, означает «страница Firefox») MarkdownPad. Пожалуйста, проверьте каналы помощи / поддержки плагина.
Катрин Лайнвебер

80

Ни один из ответов не помог мне. Но вдохновившись ответом BarryPye, я обнаружил, что он работает при использовании относительных путей!

# Contents from the '/media/user/README_1.md' markdown file:

Read more [here](./README_2.md) # It works!
Read more [here](file:///media/user/README_2.md) # Doesn't work
Read more [here](/media/user/README_2.md) # Doesn't work

1
Начало URL-адреса с «./» подразумевает поиск в локальном каталоге, а начало с «/» подразумевает «поиск в базовом каталоге». Это широко распространенное соглашение Linux. Я подозреваю, что, может быть, у вас нет полного базового каталога?
HoldOffHunger 04

5
Чем это отличается от ответа @BarryPye?
StephenBoesch

@javadba Восклицательный знак (!) в ответе BarryPye отображает файл как изображение. Вопрос касается ссылки на другой файл. (Я знаю, медленный, медленный, ответ на ваш вопрос, но я подумал, что другие, возможно, захотят узнать ответ.)
RichTBreak

Важно не
оставлять

20

Вы устанавливаете ссылку на локальный файл так же, как и на локальные изображения. Вот пример ссылки на файл start_caQtDM_7id.shв том же каталоге, что и источник уценки:

![start_caQtDM_7id.sh](./start_caQtDM_7id.sh) 

Этот "!" является важным! Благодарность!
Юрий Куликов

Это часть синтаксиса разметки, приправленного Github, для визуализации изображения, см. «Изображения» в разделе guides.github.com/features/mastering-markdown
BarryPye

13

После того, как я возился с ответом @ BringBackCommodore64, я понял это

[link](file:///d:/absolute.md)    # absolute filesystem path
[link](./relative1.md)            # relative to opened file
[link](/relativeToProject.md)     # relative to opened project

Все они протестированы Visual Studio Codeи работают,

Примечание . Абсолютный путь работает в редакторе, но не работает в режиме предварительного просмотра уценки!


ваша заметка очень важна!
Thinh NV

7

Если в имени файла есть пробелы, попробуйте следующее:

[file](./file%20with%20spaces.md)
[file](<./file with spaces.md>)

Первый кажется более надежным


Непонятно, в чем ваша проблема и о чем вы спрашиваете. Возникает вопрос: какое из названий файлов более достоверное?
Сеймур

1

Спасибо, drifty0pine!

Первое решение, оно работает!

[a relative link](../../some/dir/filename.md)
[Link to file in another dir on same drive](/another/dir/filename.md)
[Link to file in another dir on a different drive](/D:/dir/filename.md)

но мне нужно было положить больше ../до папки, в которой был мой файл, например:

[FileToOpen](../../../../folderW/folderX/folderY/folderZ/FileToOpen.txt)

0

Если файл находится в том же каталоге, что и тот, где находится .md, тогда просто размещение [Click here](MY-FILE.md)должно работать.

В противном случае можно создать путь из корневого каталога проекта. Итак, если весь корневой каталог проекта / git-repo называется my-app и нужно указать на my-app / client / read-me.md, попробуйте [My hyperlink](/client/read-me.md).

По крайней мере, работает из Chrome.


0

Это старый вопрос, но мне все еще кажется, что он не дает полного ответа на вопрос OP. Выбранный ответ о том, что безопасность является возможной проблемой, на самом деле часто не является проблемой при использовании плагина Firefox Markdown Viewer в моем опыте. Кроме того, OP, похоже, использует MS-Windows, поэтому возникает дополнительная проблема с указанием разных дисков.

Итак, вот немного более полный, но простой ответ для подключаемого модуля Markdown Viewer в Windows (и других средств визуализации Markdown, которые я видел): просто введите локальный путь, как обычно, и если это абсолютный путь обязательно начинайте его с косой черты. Так:

[a relative link](../../some/dir/filename.md)
[Link to file in another dir on same drive](/another/dir/filename.md)
[Link to file in another dir on a different drive](/D:/dir/filename.md)

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

Хотя поздно, надеюсь, это поможет!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.