如何使用markdown语法链接到任何本地文件?

175

我有一个本地 markdown 文件,其中包含几个链接,我希望这些链接指向像 pdf 这样的本地文件。

我使用以下语法:

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

然而当我将我的Markdown文件在Firefox页面中打开并点击链接时,什么也没有发生。

我错过了什么?是否可能打开本地文件?


1
这个问题在这里也有答案,看起来是一个重复的问题?:https://dev59.com/cFwY5IYBdhLWcg3wgH3y#58317580 - Akul Aggarwal
Vim 很好地突出显示了 Markdown,包括可点击的网页链接。然而,尽管本地链接被突出显示,但无法打开。 - user2023370
您也可以使用 https://facelessuser.github.io/pymdown-extensions/extensions/snippets/。它使用效果很好。 - imflash217
9个回答

188

对我来说,以上所有答案都没有用。但是在看到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

2
以"./"开头的URL路径意味着在本地目录中查找,而以"/"开头则意味着在基本目录中查找。这是广泛使用的Linux惯例。我怀疑你可能没有完整的基本目录? - HoldOffHunger
5
这与@BarryPye的回答有何不同? - WestCoastProjects
5
@javadba BarryPye的回答中的感叹号(!)将文件呈现为图像。该问题涉及到链接到另一个文件。(我知道,我的回答有些慢,但我认为其他人可能也想知道答案。) - RichTBreak
2
重要的是不要在]和(字符之间留有空格。 - jbustamovej
3
请回到上级目录,然后导航到PDF所在的位置。例如:[书籍](../../docs/mybook.pdf)。因此,使用../../返回上两级目录(假设PDF文件夹与本地MD文件相距两层目录),然后进入其文件夹/docs/ - BringBackCommodore64
显示剩余4条评论

45

在尝试了@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 中进行了测试,并且可以正常工作,

注意: 绝对路径和相对于打开项目的路径可在编辑器中工作,但无法在 Markdown 预览模式下工作!


6
你的笔记非常重要! - Thinh NV
截至今天,在VSCode中打开项目的相对链接已经失效。刚刚更新到1.61.1版本,现在它已经失效了。 - user1325696
@user1325696,是的,它在编辑器中仍然可以工作。 - Ali80
“打开的项目”是什么意思?看起来像是一个文件。 - gargoylebident
@gargoylebident vscode 打开的文件夹的根路径 - Ali80
@Ali80那么“.md”部分是什么意思?链接到文件夹会是什么样子?当我点击它时,会打开文件资源管理器吗? - gargoylebident

41

你是如何打开渲染后的Markdown文件的?

如果你通过HTTP进行主机托管,即通过http://https://访问,大多数现代浏览器将拒绝打开本地链接,例如使用file://。这是一项安全特性

出于安全考虑,Mozilla应用程序会阻止从远程文件链接到本地文件(和目录)的链接。这包括链接到硬盘驱动器上的文件,在映射的网络驱动器上的文件以及通过统一命名约定(UNC)路径访问的文件。这防止了许多不愉快的可能性,包括:

  • 允许网站通过检查默认安装路径来检测您的操作系统
  • 允许网站利用系统漏洞(例如Windows 95/98中的C:\con\con
  • 允许网站检测浏览器首选项或读取敏感数据

该页面列出了一些解决方法,但我的建议是尽可能避免这样做。


1
正如我所说,我使用插件“Markdown Viewer”在Mozilla Firefox 40.0.3中打开我的markdown文件。 - Alexis Le Provost
啊,你之前没提到那个插件;-) 我用MarkdownPad的HTML导出功能试了一下(我以为“Firefox页面”是指这个)。请查看插件的帮助/支持渠道。 - Katrin Leinweber

35

你链接到本地文件的方式与链接本地图片的方式相同。这里有一个示例,链接到与Markdown源文件在同一目录下的文件start_caQtDM_7id.sh:

您可以像链接本地图片一样链接到本地文件。以下是一个示例,将文件start_caQtDM_7id.sh链接到与Markdown源文件相同的目录中:

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

1
这个 "!" 非常重要!谢谢! - Yuriy Kulikov
这是Github风格的Markdown语法的一部分,用于呈现图像,请参见https://guides.github.com/features/mastering-markdown/下的“Images”部分。 - BarryPye

22

如果文件名中有空格,请尝试以下方法:

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

第一个似乎更可靠


你的问题和询问不太清楚。问题是:哪个文件名更可靠? - Seymour
1
完美!我一直在寻找的是 [file](<./file with spaces.md>) - Partha Mandal
原始问题引用了.pdf文档的链接,但所有答案都引用了.md文档。对于浏览答案的任何人来说,这个答案适用于.pdf文档。如果您在.md文档中ctrl-click链接,您的文档应该会在您选择的.pdf查看器中打开。 - Cam Cairns

6
这是一个老问题,但对我来说似乎仍然没有完整的答案回答OP的问题。所选的有关安全性可能是问题的答案实际上通常是在使用Firefox的“Markdown Viewer”插件中遇到的问题。此外,OP似乎正在使用MS-Windows,因此存在指定不同驱动器的附加问题。
因此,在Windows上使用“Markdown Viewer”插件(以及我看到的其他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)

鉴于提问者的示例,最后一个可能是他们在寻找的。 请注意,这也可用于显示目录而不是文件。

虽然有点晚了,但我希望这可以帮到你!


1
是的,对于绝对路径,在驱动器名称前加上斜杠对我来说有效 [link](/J:/dir/filename.md) - John Jesus

5
感谢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)

1
如果文件与.md文件在同一个目录中,只需输入[点击此处](MY-FILE.md)即可。
否则,可以从项目根目录创建路径。因此,如果整个项目/ git-repo根目录称为“my-app”,并且想要指向my-app/client/read-me.md,则尝试[我的超链接](/client/read-me.md)
至少在Chrome中有效。

谢谢!在同一目录下时不需要加上感叹号。 - boardtc

1

看起来大多数Markdown查看器不支持非http(s) URL。由于Markdown支持一些HTML标记,为什么不使用它呢?

<a href="file:///path/to/local/file.pdf">link</a>

这个重定向很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接